On Mon, May 19, 2008 at 7:00 PM, Dale Martenson
<dale.martenson / gmail.com> wrote:
> I am trying to get access to an instance variable. I have simplified
> my usage down to the following example.
>

Hint.  What do you think the difference is between:

> module A
>  def A.a

and

> module B
>  def b

Why do you need to write:

   A.a
but just
   b

in the go method in Blah?

Let's instrument your code a little bit:

module A
 def A.a
   puts "self is #{self} A:#{@u}"
 end
end

module B
 def b
   puts "self is #{self} B:#{@u}"
 end
end

module C
 include A
 include B
end

class Blah
 include C

 def initialize(u)
   puts "Initializing #{self} u:#{u}"
   @u = u
 end

 def go
   A.a
   b
 end
end

blah = Blah.new("bob")

blah.go

RubyMate r8136 running Ruby r1.8.6
(/System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/bin/ruby)
>>> untitled

Initializing #<Blah:0x8e2b0> u:bob
self is A A:
self is #<Blah:0x8e2b0> B:bob
Program exited.


The first method is defined ON the module A, not in the module, so
it's not a method of the instance of Blah, and within the A.a method
@u refers to an instance variable of the object named A, i.e. the
module itself, where as the b method, being in an instance method
provided by the B module, is referring to the instance variable in the
instance of Blah.

-- 
Rick DeNatale

My blog on Ruby
http://talklikeaduck.denhaven2.com/