Newbie Class variable question

Discussion in 'Ruby' started by Elias Athanasopoulos, Oct 12, 2003.

  1. Hello!

    Forgive my newbie-ness.

    Using ruby 1.8, while trying to create a similar example of
    one I found to the book called "The Ruby Way":

    class Foo

    @@bar = 10

    end

    Foo.bar = 4

    I get:

    elathan@velka:~/src/ruby> ruby test.rb
    test.rb:7: undefined method `bar=' for Foo:Class (NoMethodError)

    Is this behaviour normal?

    Enjoy,
    --
    University of Athens I bet the human brain
    Physics Department is a kludge --Marvin Minsky
     
    Elias Athanasopoulos, Oct 12, 2003
    #1
    1. Advertising

  2. Elias Athanasopoulos

    ts Guest

    >>>>> "E" == Elias Athanasopoulos <> writes:

    E> elathan@velka:~/src/ruby> ruby test.rb
    E> test.rb:7: undefined method `bar=' for Foo:Class (NoMethodError)

    E> Is this behaviour normal?

    Yes, what you want is a class *instance* variable

    svg% cat b.rb
    #!/usr/bin/ruby
    class A
    class << self
    attr_accessor :a
    end
    end

    A.a = 12
    p A.a
    svg%

    svg% b.rb
    12
    svg%

    a class variable can be seen as a shared variable

    svg% cat b.rb
    #!/usr/bin/ruby
    class A
    @@a = 12

    def self.a
    p @@a
    end

    def a
    p @@a
    end
    end

    class B < A
    def self.b
    p @@a
    end

    def b
    p @@a
    end
    end

    A.a
    A.new.a

    B.b
    B.new.b
    svg%

    svg% b.rb
    12
    12
    12
    12
    svg%





    Guy Decoux
     
    ts, Oct 12, 2003
    #2
    1. Advertising

  3. On Sun, Oct 12, 2003 at 09:21:24PM +0900, ts wrote:
    > E> elathan@velka:~/src/ruby> ruby test.rb
    > E> test.rb:7: undefined method `bar=' for Foo:Class (NoMethodError)
    >
    > E> Is this behaviour normal?
    >
    > Yes, what you want is a class *instance* variable


    Actually, I want an easy way to access a class variable from
    another class. I construct objects, which I want them to
    carry an array specific to their class:

    class Foo
    @@info = ...
    ...
    end

    class Bar
    @@info = ...
    ...
    end

    As I see from your reply, the only way to access a class
    variable from another class (or outside the class in general)
    is to define self.foo and foo methods; foo stands for the class
    var.

    This sounds a little bit wierd to me, since, in the book[*] I have,
    the author accesses a class variable implicitly, without having
    define self.foo and foo inside the class.

    Thanks for your reply!

    [*] The Ruby Way - Hal Fulton

    Enjoy,
    --
    University of Athens I bet the human brain
    Physics Department is a kludge --Marvin Minsky
     
    Elias Athanasopoulos, Oct 12, 2003
    #3
  4. On Mon, Oct 13, 2003 at 05:23:46AM +0900, wrote:
    > Just to try to get it all clear: do you have a page number in The Ruby
    > Way for the example you mentioned?


    Yes. It's on page 250.

    As I see it now, the author has defined Metal.current_temp=(x).

    I apologize for the confusion and I'm thankfull for your
    detailed replies. :)

    Now it's all clear to me.

    Enjoy,
    --
    University of Athens I bet the human brain
    Physics Department is a kludge --Marvin Minsky
     
    Elias Athanasopoulos, Oct 12, 2003
    #4
    1. Advertising

Want to reply to this thread or ask your own question?

It takes just 2 minutes to sign up (and it's free!). Just click the sign up button to choose a username and then you can ask your own questions on the forum.
Similar Threads
  1. MDBloemker
    Replies:
    8
    Views:
    453
    MDBloemker
    May 10, 2004
  2. E11
    Replies:
    1
    Views:
    4,800
    Thomas Weidenfeller
    Oct 12, 2005
  3. chenyu
    Replies:
    1
    Views:
    274
    Lee Harr
    Oct 27, 2003
  4. Christian Maier
    Replies:
    3
    Views:
    501
    John Harrison
    Feb 15, 2007
  5. Sam Kong
    Replies:
    2
    Views:
    174
    Joel VanderWerf
    May 25, 2005
Loading...

Share This Page