Home     |     .Net Programming    |     cSharp Home    |     Sql Server Home    |     Javascript / Client Side Development     |     Ajax Programming

Ruby on Rails Development     |     Perl Programming     |     C Programming Language     |     C++ Programming     |     IT Jobs

Python Programming Language     |     Laptop Suggestions?    |     TCL Scripting     |     Fortran Programming     |     Scheme Programming Language


 
 
Cervo Technologies
The Right Source to Outsource

MS Dynamics CRM 3.0

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:

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:

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:

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:

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

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

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

Add to del.icio.us | Digg this | Stumble it | Powered by Megasolutions Inc