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 6/5/07, Mike <michaelst@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.
Forum
(Forum)
5 June 2007 12:30
3
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
···
On 6/5/07, Mike <michaelst@gmail.com> wrote:
--
You see things; and you say Why?
But I dream things that never were; and I say Why not?
-- George Bernard Shaw
You don't. Just use String#replace.
Btw, what are you trying to achieve?
Kind regards
robert
···
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?
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
Harry3
(Harry)
5 June 2007 12:33
6
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
···
On 6/5/07, Mike <michaelst@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.
--
A Look into Japanese Ruby List in English
I missed that method. Thank you.
···
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
Hi,
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
···
Am Dienstag, 05. Jun 2007, 21:30:13 +0900 schrieb Robert Dober:
--
Bertram Scharpf
Stuttgart, Deutschland/Germany
http://www.bertram-scharpf.de
Hi --
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
···
On Tue, 5 Jun 2007, Harry Kakueki wrote:
On 6/5/07, Mike <michaelst@gmail.com> wrote:
--
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,
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
···
Am Dienstag, 05. Jun 2007, 22:16:33 +0900 schrieb dblack@wobblini.net:
--
Bertram Scharpf
Stuttgart, Deutschland/Germany
http://www.bertram-scharpf.de