Minero Aoki wrote:

> Hi all,

Moin!

>   * Allows Proc#call to take a block.
> 
>     def m(&block)
>       block.call { p "OK" }
>     end
>     m {|&b| b.call }   #=> "OK"

Yay, finally we'll be able to use define_method() everywhere where we 
would use def instead.

However all this raises some questions:

1) What will yield(*[]) do?

2) What will happen with these examples?

    define_method(:foo) { |arg| result = arg }
    foo(5); result # => 5 or ~> NameError?

    # Or more interesting:
    define_method(:foo) { foo = nil; return true }
    foo # => true or nil or NameError?
    foo # => true or nil?

3) What will happen with these examples?

    [1, 2, 3].each do |item|
      [1, 2, 3].each do |item|
        # Exception or reassignment of outer item or
        # own private inner item?
      end
    end

    [1, 2, 3].each do |item|
      [1, 2, 3].each do |inner_item|
        item += 1 if item == inner_item
      end
      p item
    end

Regards,
Florian Gross