gpt4 book ai didi

ruby - 在 procs、lambdas 和 block 中返回语句

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

我很难理解 return 在 block 、过程和 lambda 中的工作原理。

例如,在下面的例子中,为什么 batman_ironman_proc 有效,而 batman_yield 抛出错误?

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

def batman_yield
yield
"Iron man will win!"
end

victor = Proc.new { return "Batman will win!" }

puts batman_ironman_proc
#batman_yield(&victor) === This code throws an error.

最佳答案

作为one answer在链接的问题中显示:

The return keyword always returns from the method or lambda in the current context. In blocks, it will return from the method in which the closure was defined. It cannot be made to return from the calling method or lambda.

您的第一个示例是成功的,因为您在要返回的同一函数中定义了 victor,因此 return 在该上下文中是合法的。在您的第二个示例中, victor 是在顶层定义的。那么,return 的效果不是是从 batman_yield(调用方法)返回,而是[如果有效]从顶层本身返回(定义 Proc 的地方)。

说明:虽然您可以访问 block 的返回值(即“ block 中计算的最后一个表达式的值作为 yield 的值传递回方法”- 如根据您的评论),由于上述原因,您不能使用return 关键字。示例:

def batman_yield
value = yield
return value
"Iron man will win!"
end

victor = Proc.new { return "Batman will win!" }
victor2 = Proc.new { "Batman will win!" }

#batman_yield(&victor) === This code throws an error.
puts batman_yield(&victor2) # This code works fine.

关于ruby - 在 procs、lambdas 和 block 中返回语句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15562915/

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