class_eval, class_exec で 次のような結果になります。(instance_xxxでも同様)

class Foo
  def self.abc
    puts 'abc'
  end
end

aa = lambda { abc }
bb = proc { abc }


Foo.class_eval { abc }
> abc    <= OK        

Foo.class_eval &aa
> ArgumentError: wrong number of arguments (given 1, expected 0)  <= NG!!

Foo.class_eval &bb
> abc  <= OK!!

Foo.class_exec &aa
> abc  <= OK!!

Foo.class_exec &bb
> abc  <= OK!!

lambda を class_eval で 渡したときに ArgumentError がでてしまいます。
class_exec を使えば問題ないのですが、なぜ、class_eval と lambda の組み合わせの場合に、ArgumentErrorが発生するのでしょうか??