|
|
 |
 |
 |
 |
Ruby Programming Language
|
 |
 |
 |
 |
 |
 |
 |
 |
Writing method "change!" for String
Hi, I'm trying to write simple method to change internal value of String class: class String def change! self="0" if self.downcase=="myvalue1" self="1" if self.downcase=="myvalue2" self end end test="myvalue1" test.change! p test It should just change value of string to what I want. But I get error: "Can't change the value of self". How do I proceed? Thanks.
On 05.06.2007 14:16, Mike wrote:
> Hi, > I'm trying to write simple method to change internal value of > String class: > class String > def change! > self="0" if self.downcase=="myvalue1" > self="1" if self.downcase=="myvalue2" > self > end > end > test="myvalue1" > test.change! > p test > It should just change value of string to what I want. But I get error: > "Can't change the value of self". > How do I proceed?
You don't. Just use String#replace. Btw, what are you trying to achieve? Kind regards robert
On 6/5/07, Mike <michae@gmail.com> wrote:
> Hi, > I'm trying to write simple method to change internal value of > String class: > class String > def change! > self="0" if self.downcase=="myvalue1" > self="1" if self.downcase=="myvalue2" > self > end > end > test="myvalue1" > test.change! > p test > It should just change value of string to what I want. But I get error: > "Can't change the value of self". > How do I proceed? > Thanks.
use String#replace instead of assignment. Beware of the implications! (i.e. you are changing the string the variable points to!) for example: .. test = "myvalue1" foo = test bar = test test.change! p foo #=> "0" p bar #-=> "0" If you don't want this behaviour return new value instead of replace and do an assigment to variable: test = test.change
On Jun 5, 10:26 pm, Robert Klemme <shortcut@googlemail.com> wrote:
> On 05.06.2007 14:16, Mike wrote: > > Hi, > > I'm trying to write simple method to change internal value of > > String class: > > class String > > def change! > > self="0" if self.downcase=="myvalue1" > > self="1" if self.downcase=="myvalue2" > > self > > end > > end > > test="myvalue1" > > test.change! > > p test > > It should just change value of string to what I want. But I get error: > > "Can't change the value of self". > > How do I proceed? > You don't. Just use String#replace. > Btw, what are you trying to achieve? > Kind regards > robert
I missed that method. Thank you.
On 6/5/07, Mike <michae@gmail.com> wrote: > Hi, > I'm trying to write simple method to change internal value of > String class: > class String > def change! > self="0" if self.downcase=="myvalue1" > self="1" if self.downcase=="myvalue2" > self > end > end
class String def change! case downcase when "myvalue" replace("0") etc. etc. > test="myvalue1" > test.change! > p test > It should just change value of string to what I want. But I get error: > "Can't change the value of self". > How do I proceed?
HTH Robert -- You see things; and you say Why? But I dream things that never were; and I say Why not? -- George Bernard Shaw
Mike wrote: > It should just change value of string to what I want. But I get error: > "Can't change the value of self".
You really can't. Consider: class Fixnum def double! self *= 2 end end 3.double! # wha happen? > How do I proceed?
ri String#replace
On 6/5/07, Mike <michae@gmail.com> wrote:
> Hi, > I'm trying to write simple method to change internal value of > String class: > class String > def change! > self="0" if self.downcase=="myvalue1" > self="1" if self.downcase=="myvalue2" > self > end > end > test="myvalue1" > test.change! > p test > It should just change value of string to what I want. But I get error: > "Can't change the value of self". > How do I proceed? > Thanks.
Do not try to change self. Try this. class String def change! val="0" if self.downcase=="myvalue1" val="1" if self.downcase=="myvalue2" val end end test="myvalue1" p test.change! p test Harry -- A Look into Japanese Ruby List in English http://www.kakueki.com/
Hi --
On Tue, 5 Jun 2007, Mike wrote: > Hi, > I'm trying to write simple method to change internal value of > String class: > class String > def change! > self="0" if self.downcase=="myvalue1" > self="1" if self.downcase=="myvalue2" > self > end > end > test="myvalue1" > test.change! > p test > It should just change value of string to what I want. But I get error: > "Can't change the value of self". > How do I proceed?
ri String#replace David -- Q. What is THE Ruby book for Rails developers? A. RUBY FOR RAILS by David A. Black (http://www.manning.com/black) (See what readers are saying! http://www.rubypal.com/r4rrevs.pdf) Q. Where can I get Ruby/Rails on-site training, consulting, coaching? A. Ruby Power and Light, LLC (http://www.rubypal.com)
Hi, Am Dienstag, 05. Jun 2007, 21:30:13 +0900 schrieb Robert Dober: > class String > def change! > case downcase > when "myvalue" > replace("0") > etc. etc.
alternatively: class String def change! case self when /myvalue1/i then replace "0" when /myvalue2/i then replace "1" etc. etc. Bertram -- Bertram Scharpf Stuttgart, Deutschland/Germany http://www.bertram-scharpf.de
Hi --
On Tue, 5 Jun 2007, Harry Kakueki wrote: > On 6/5/07, Mike <michae @gmail.com> wrote: >> Hi, >> I'm trying to write simple method to change internal value of >> String class: >> class String >> def change! >> self="0" if self.downcase=="myvalue1" >> self="1" if self.downcase=="myvalue2" >> self >> end >> end >> test="myvalue1" >> test.change! >> p test >> It should just change value of string to what I want. But I get error: >> "Can't change the value of self". >> How do I proceed? >> Thanks. > Do not try to change self. > Try this. > class String > def change! > val="0" if self.downcase=="myvalue1" > val="1" if self.downcase=="myvalue2" > val > end > end > test="myvalue1" > p test.change! > p test
I think even the original idea probably wasn't a good !-candidate (since bang methods generally have non-bang equivalents, whereas methods with names that imply change or other "danger" [like replace] don't), and definitely if you're not modifying the string or doing anything else dangerous, the ! is not a good idea, since it's out of keeping with the convention. David -- Q. What is THE Ruby book for Rails developers? A. RUBY FOR RAILS by David A. Black (http://www.manning.com/black) (See what readers are saying! http://www.rubypal.com/r4rrevs.pdf) Q. Where can I get Ruby/Rails on-site training, consulting, coaching? A. Ruby Power and Light, LLC (http://www.rubypal.com)
Hi, Am Dienstag, 05. Jun 2007, 22:16:33 +0900 schrieb dbl@wobblini.net: > I think even the original idea probably wasn't a good !-candidate > (since bang methods generally have non-bang equivalents, whereas > methods with names that imply change or other "danger" [like replace] > don't),
As far as I see banged methods are mostly implemented as class String def modify_it! ... end def modify_it str = dup str.modify_it! str end end (Of course some C equivalent.) So, if Mike means what he does he can easily add the counterpart. Bertram -- Bertram Scharpf Stuttgart, Deutschland/Germany http://www.bertram-scharpf.de
|
 |
 |
 |
 |
|