Clemens Hintze <c.hintze / gmx.net> writes:

> Hmmm... Why introducing the concept of a new class herein? From the
> users point of view, what is the difference between
> 
>     obj = Myclass.new
>     class << obj
>        def what
>            print "Myclass\n";
>        end
>     end
> 
> and
> 
>     obj = Myclass.new
>     def obj.what
>         print "Myclass\n";
>     end

Well, there are some scoping issues. You also can't use things such as 
'attr' with the second method. I agree, though, that we need to
document this from the users viewpoint, not the implementation's.

> > Wouldn't the object be a Proc object?
> 
> Yes. Every closure is an instance of class Proc. A block, however, is
> only code surrounded by '{' and '}' or 'do' and 'end'. We can use
> 'lambda' or 'proc' or 'Proc.new' to convert a block to a closure
> (means Proc instance). Or we could use 'yield' to execute a block.

I think we're agreeing! I think your original note mentioned a
"closure object", and I was simply suggesting for consistency we
should call objects by their class's name were possible a String
object, a File object, and a Proc object. I agree absolutely we need
to distinguish between unbound blocks and closures.

Regards

Dave