From: Paul Brannan Date: 2007-09-20T22:42:25+09:00 Subject: Re: scope questions On Wed, Sep 19, 2007 at 12:59:58AM +0900, botp wrote: > irb(main):008:0> def m2 > irb(main):009:1> var = 1 > irb(main):010:1> def m3 > irb(main):011:2> var = 2 > irb(main):012:2> puts "inner var = #{var}" > irb(main):013:2> end > irb(main):014:1> puts "outer var = #{var}" > irb(main):015:1> end > => nil > irb(main):016:0> m2 > outer var = 1 > => nil > irb(main):017:0> m2.m3 > outer var = 1 > inner var = 2 > => nil > irb(main):018:0> m3 > inner var = 2 > => nil This might not be doing what you think it is: irb(main):020:0> $VERBOSE = true => true irb(main):023:0> m2.m3 (irb):9: warning: method redefined; discarding old m3 outer var = 1 inner var = 2 => nil irb(main):024:0> m2 (irb):9: warning: method redefined; discarding old m3 outer var = 1 => nil irb(main):025:0> nil.m3 inner var = 2 => nil (your example made it look like m3 is inside m2, which it isn't. m2 is returning nil, and since you made m3 a public method, m2.m3 is the same as m2(); nil.m3()) Paul