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!