Peña, Botp
9/21/2007 4:19:00 AM
From: Paul Brannan [mailto:pbrannan@atdesk.com]
# 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
my bad. sorry for the confusion.
i simply meant that you can define m3 inside m2, and that its var will not clash with that of m2, and that you can only invoke m3 if you've invoked m2 already.
in other words, you cannot do m3 right away. you'll have to do m2 first, or if you wish to run m3 immediately, you may follow it thru after m2, or m2.m3. i guess it would be clearer if i nest it further like m1.m2.m3.m4. i could go that route to reach m4 immediately, or just wait and just do m1; then later, m2, then later m3... from then on m4 will be defined and i could then just invoke it plainly as m4. (of course by this behaviour, one can also redefine methods by inserting them within methods)
pls correct me if i'm wrong, i usually make stupid assumptions based on my limited experience. pardon a nuby pls :(
kind regards -botp