[lnkForumImage]
TotalShareware - Download Free Software

Confronta i prezzi di migliaia di prodotti.
Asp Forum
 Home | Login | Register | Search 


 

Forums >

comp.lang.ruby

Writing method "change!" for String

Mike

6/5/2007 12:16:00 PM

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.

10 Answers

Robert Klemme

6/5/2007 12:27:00 PM

0

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

Jano Svitok

6/5/2007 12:29:00 PM

0

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.

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

Mike

6/5/2007 12:30:00 PM

0

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.

Robert Dober

6/5/2007 12:30:00 PM

0

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
>
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

Devin Mullins

6/5/2007 12:32:00 PM

0

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

Harry Kakueki

6/5/2007 12:33:00 PM

0

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.
>
>
>
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.ka...

dblack

6/5/2007 12:36:00 PM

0

Bertram Scharpf

6/5/2007 12:37:00 PM

0

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-...

dblack

6/5/2007 1:17:00 PM

0

Bertram Scharpf

6/5/2007 1:51:00 PM

0

Hi,

Am Dienstag, 05. Jun 2007, 22:16:33 +0900 schrieb dblack@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-...