Henrik
                (Henrik)
              
                
              
                  
                  
              1
              
             
            
              I haven't been able to figure out how to write a destructive string
method of my own. How do I change the value of "self"? This is what I
tried first:
class String
  alias_method(:orig_upcase, :upcase)
  def upcase
    orig_upcase.tr("åäö", "ÅÄÖ")
  end
  def upcase!
    self = self.upcase
  end
end
"upcase" works fine but "upcase!" doesn't - "can't change the value of
self". Nor can I do (assuming another alias_method):
  def upcase!
    self.old_upcase!
    self.tr!("åäö", "ÅÄÖ")
  end
or the same thing chained (self.old_upcase!.tr!(...)), because that only
returns nil. I've even grasped for straws like
  def upcase!
    =(self.upcase)
  end
with no luck. Very grateful for any help.
···
--
Posted via http://www.ruby-forum.com/.
 
             
            
              
              
              
            
            
           
          
            
            
              Henrik wrote:
I haven't been able to figure out how to write a destructive string method of my own. How do I change the value of "self"?
ri String#replace
I don't know if that'll help, 'cause I don't know why this didn't work:
def upcase!
  self.old_upcase!
  self.tr!("åäö", "ÅÄÖ")
end
Devin
             
            
              
              
              
            
            
           
          
            
            
              Henrik schrieb:
I haven't been able to figure out how to write a destructive string method of my own. How do I change the value of "self"? This is what I tried first:
it makes no sense to change self, but you can change the data of self:
---- test.rb
class String
   def makefirstA
     self[0]= 65
     self
   end
end
x="xxxx"
p x.makefirstA
p x
--- end of test.rb
delivers
ruby test.rb
"Axxx"
···
class String
  alias_method(:orig_upcase, :upcase)
  def upcase
    orig_upcase.tr("åäö", "ÅÄÖ")
  end
  def upcase!
    self = self.upcase
  end
end
"upcase" works fine but "upcase!" doesn't - "can't change the value of self". Nor can I do (assuming another alias_method):
  def upcase!
    self.old_upcase!
    self.tr!("åäö", "ÅÄÖ")
  end
or the same thing chained (self.old_upcase!.tr!(...)), because that only returns nil. I've even grasped for straws like
  def upcase!
    =(self.upcase)
  end
with no luck. Very grateful for any help.
--
Mit freundlichen Grüßen
Fritz Heinrichmeyer FernUniversität, LG ES, 58084 Hagen (Germany)
tel:+49 2331/987-1166 fax:987-355
 
             
            
              
              
              
            
            
           
          
            
            
              Henrik wrote:
Nor can I do (assuming another alias_method):
  def upcase!
    self.old_upcase!
    self.tr!("åäö", "ÅÄÖ")
  end
or the same thing chained (self.old_upcase!.tr!(...)), because that only returns nil.
I'd do it like this: (Ignoring the more obvious replace solution)
class String
   alias :old_upcase! :upcase!
   def upcase!()
     old_upcase!
     tr!("åäö", "ÅÄÖ")
   end
   def upcase()
     result = self.clone
     result.upcase!
     return result
   end
end
···
--
http://flgr.0x42.net/
 
             
            
              
              
              
            
            
           
          
            
              
                Henrik
                (Henrik)
              
              
                  
                  
              6
              
             
            
              ts wrote:
> 	def upcase!
> 	  self = self.upcase
          replace(upcase)
> 	end
> end
Guy Decoux
Worked fine, thanks! Got some help on #ruby-lang, apparently you can do
stuff like the above and
self[0..-1] = "whatever"
but not
self = "whatever"
seeing as self is an object, not a variable - if anyone else was
wondering.
···
--
Posted via http://www.ruby-forum.com/\.
 
             
            
              
              
              
            
            
           
          
            
            
              "self = self.upcase".replace("replace(upcase)")
(Sorry, couldn't resist.)
David
···
On Fri, 6 Jan 2006, ts wrote:
> 	def upcase!
> 	  self = self.upcase
         replace(upcase)
--
David A. Black
dblack@wobblini.net
"Ruby for Rails", from Manning Publications, coming April 2006!