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.
henrik
2
“H” == Henrik [email protected] writes:
H> def upcase!
H> self = self.upcase
replace(upcase)
H> end
H> end
Guy Decoux
henrik
3
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
4
ts wrote:
“H” == Henrik [email protected] writes:
H> def upcase!
H> self = self.upcase
replace(upcase)
H> end
H> 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.
henrik
5
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”
“Axxx”
henrik
6
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
henrik
7
On Fri, 6 Jan 2006, ts wrote:
“H” == Henrik [email protected] writes:
H> def upcase!
H> self = self.upcase
replace(upcase)
“self = self.upcase”.replace(“replace(upcase)”)
(Sorry, couldn’t resist.)
David
David A. Black
[email protected]
“Ruby for Rails”, from Manning Publications, coming April 2006!