Martin DeMello wrote: >Very sweet. How does this work, internally? Have lambdas been >specialcased at the interpreter level? > > There is a NODE_LAMBDA now, but the () change seems to be independent of the introduction of the f = { |x, y| x + y } syntax. Internally a method call to variable 'a' is changed to a call to "call" on the referenced object. This means, it's also possible to define call methods in arbitrary objects or classes, like this: class Hash def call(x) self[x] end end fib = Hash.new do |f, i| f[i] = case i when 0 then 0 when 1 then 1 else f(i - 1) + f(i - 2) end end p fib(25) -- Florian Frank