示例代码:
def func(a, &closure)
return a if a
closure ||= lambda{ |words| puts "!!! " + words }
closure.call("1")
closure.call("2")
end
func(false){ |words| puts "??? " + words }
请解释。我无法理解这一行:
closure ||= lambda{ |words| puts "!!! " + words }
如果删除 ||
将永久显示如下:"!!! 1"、"!!! 2"
。为什么?
并解释一下:
def func(a, &closure)
&closure
在哪里。
最佳答案
def func(a, &closure)
return a if a
closure ||= lambda{ |words| puts "!!! " + words }
closure.call("1")
closure.call("2")
end
func(false){ |words| puts "??? " + words }
在“&closure”中,和号 (&) 表示该函数将 block 作为参数。发生的事情是您将 Proc( block 只是用不同语法定义的 Proc)传递给 func 函数,然后使用变量 1 和 2 调用该函数。
||= 表示“或等于”。如果当前值为 nil,则它用于为变量赋值。它是以下内容的简写:
closure = lamda{ |words| puts "!!! " + words } if closure.nil
This blog post很好地解释了 blocks、Procs 和 lamdas。
关于ruby - Ruby 中的闭包,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6168745/