matz / ruby-lang.org (Yukihiro Matsumoto) writes:

> |Perhaps the distinction is whether it's being used as an lvalue or an
> |rvalue. As an lvalue, it should be stored, but as an rvalue it
> |probably shouldn't.
> 
> Sounds interesting.  Unfortunately, there's no way to distinguish
> lvalue and rvalue.

OK - plan B

Rather than have the block simply return a default value, give it
enough context to let it assign that value or not:

  h = Hash.new { 0 }    # simply return 0, do not alter the hash

  h = Hash.new { |hash, key| hash[key] = Hash.new } # put a new hash
                                                    # in place

That gives control back to the developer.


Dave