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