gpt4 book ai didi

ruby - Ruby 中的闭包

转载 作者:数据小太阳 更新时间:2023-10-29 07:51:01 26 4
gpt4 key购买 nike

示例代码:

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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com