Question regarding interaction between modules and classes

Get uting @@foo instead of @foo

···

Sent from my HTC

----- Reply message -----
From: "Geometric Patterns" <geometric.patterns@gmail.com>
To: <ruby-talk@ruby-lang.org>
Subject: Question regarding interaction between modules and classes
Date: Sun, May 8, 2011 05:02

Hi,

In the code below, is there a way to learn @foo from $bar_one
using $bar_two?

Many thanks in advance!!

----------------

#!/usr/bin/ruby -w

module Foo
   def setup
      @foo = self.object_id
   end
   def foo
      return @foo
   end
end

class Bar
   include Foo
end

$bar_one = Bar.new
$bar_one.setup
p $bar_one.foo # => 2148224640

$bar_two = Bar.new
p $bar_two.foo # => warning: instance variable @foo not initialized

----------------

--
Posted via http://www.ruby-forum.com/.

Better: Don't use class variables. If there's a @@foo somewhere in the
ancestry tree of a module or class, this one will be used, instead of
what you set @@foo to in your own class.

A class method works much better:

class Klass
  @foo = "foo"
  def self.foo # note the self receiver. Very important!
    @foo
  end
end

Klass.foo
=> "foo"

To get @foo from another class:

class KlassTwo
  @foo = Klass.foo # Klass has to be defined before KlassTwo, obviously.
  def self.foo
    @foo
  end
end

···

On Sun, May 8, 2011 at 11:03 AM, uwe@kubosch.no <uwe@kubosch.no> wrote:

Get uting @@foo instead of @foo

--
Phillip Gawlowski

Though the folk I have met,
(Ah, how soon!) they forget
When I've moved on to some other place,
There may be one or two,
When I've played and passed through,
Who'll remember my song or my face.