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