gpt4 book ai didi

ruby - 为什么调用在方法中声明的返回 Proc 有效?

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

我一直在学习 Codecademy Ruby 类(class),其中有一个关于 lambdas 和 Procs 的练习。我确实理解其中的区别,但我不太明白为什么此处列出的第一个代码有效,而第二个却无效。

为什么这样做:

def batman_ironman_proc
p = Proc.new { return "Batman will win!" }
p.call
"Iron Man will win!"
end

puts batman_ironman_proc # prints "Batman will win!"

但不是这个:

def batman_ironman_proc(p)
p.call
"Iron Man will win!"
end

p = Proc.new { return "Batman will win!" }
puts batman_ironman_proc(p) # unexpected return

最佳答案

这是因为 proc 与控制流关键字的行为方式:returnraisebreakredo, retry

这些关键字将从 proc 定义的范围跳转,否则 lambda 有自己的范围,因此这些关键字将从 lambda 的 跳转> 范围。

在您的第二个示例中,proc 是在 main 的范围内定义的。正如 tadman 在下面评论的那样,您无法从 main 返回,只有 exit 可用。

如果您从 proc 切换到 lambda,您的代码将正常工作。

关于ruby - 为什么调用在方法中声明的返回 Proc 有效?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14774985/

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