From: Rick DeNatale Date: 2008-05-20T08:36:40+09:00 Subject: Re: Instance Variable in Mixins On Mon, May 19, 2008 at 7:00 PM, Dale Martenson 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 # u:bob self is A A: self is # 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/