传递块作为方法参数在Ruby 1.9.3中死亡

jos*_*ott 2 ruby

所以这个模式:

def foo(&block)
  block.call
end

foo lambda { puts 'hi' }
Run Code Online (Sandbox Code Playgroud)

导致这个:

wrong number of arguments (1 for 0) (ArgumentError)

使用Ruby 1.9.3.

我做错了吗?

Dav*_*ton 6

你不需要lambda,只需要块:

def foo(&block)
  block.call
end

foo { puts 'hi' }
Run Code Online (Sandbox Code Playgroud)

如果要传递proc,请使用普通参数:

def foo(ohai)
  ohai.call
end

foo lambda { puts 'hi' }
Run Code Online (Sandbox Code Playgroud)