Hi,
I want to show you a small log excerpt. I would like to ask, whether
you can help me to understand?
$ ruby -v
ruby 1.3.6 (1999-07-28) [sparc-solaris2.6]
$ rbc
rbc0> module Foo
rbc1> @ivar = 12
rbc1>
rbc1> def show
rbc2> print "Value is: `#{@ivar}'\n"
rbc2> end
rbc1> end
nil
# Okay! Here I have defined a module `Foo With an instance variable???
rbc0> Foo.show
NameError: (eval):1: undefined method `show' for Foo:Module
# That means, `Foo' does not know the method `show'. I guess, because
# it is not a module function, right?
rbc0> foo = Foo.clone
Foo
# Now I have cloned `Foo' and store it into a variable
rbc0> foo.show
NameError: (eval):1: undefined method `show' for Foo:Module
# Hmm, the instance in `foo' doesn't know `show' yet. Is okay, I guess.
# Same reason as before.
rbc0> Foo.instance_variables.include? "@ivar"
true
# Aha! `Foo' contains the instance variable.
rbc0> foo.instance_variables.include? "@ivar"
true
# And so does `foo'!
rbc0> Foo.methods.include? :show
false
# Oops! `Foo' knows about instance variables, but not methods????
rbc0> foo.methods.include? :show
false
# Same here...
rbc0> foo.extend(Foo)
Foo
# Now the instance referred by `foo' will be extend by module `Foo'. I
# would not assume something special here! As `foo' is already a `Foo',
# it should not change anything, should it?
rbc0> foo.methods.include? :show
false
# Right! It has changed nothing. Or ... ?
rbc0> foo.show
Value is: `12'
nil
# Hah! Gotcha! What is that? Please help and explain!
rbc0> ^D
NOTE PLEASE: I don want to change anything here. I will that current
behavior, to implement a tricky module. I will post it
later to the list. I only want to understand, what is going
on here! :-)
\cle