foo1 以下不起作用。为什么?。我-6ren">
gpt4 book ai didi

ruby 过程问题

转载 作者:数据小太阳 更新时间:2023-10-29 08:55:02 28 4
gpt4 key购买 nike

以下代码有效

def lab
Proc.new { return "foo1" }.call
return "foo2"
end

puts lab #=> foo1

以下不起作用。为什么?。我得到 LocalJumpError

class Foo
def self.doit(p)
p.call
end
end

p = Proc.new {
return 'from block'
}

a = Foo.doit(p)

puts a #=> LocalJumpError: unexpected return

最佳答案

这是procs vs lambdas之间的区别(谷歌搜索会让您获得更多资源)。

基本上,在第一种情况下,您的“return foo1”是从实验室返回,并且需要在返回的上下文中。

您可以使用 lambda 实现您想要做的事情

p = lambda { return "from block" }

另外,请注意,您通常不需要在 procs 或 lambda 中使用 return 语句;他们将返回最后计算的表达式。所以,它等同于:

p = Proc.new{ "from block" }

关于 ruby 过程问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3544150/

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