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.

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.

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

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

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)

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