我正在尝试编写此代码的等效代码:
Thread.new do loop do
...
end end.join
使用类方法Thread.loop
,如下所示:
Thread.loop do
...
end.join
我将方法定义如下:
class Thread
def self.loop ≺ Thread.new{loop{pr.call}} end
end
并像这样使用它:
Thread.loop do
sleep(1)
puts "foo"
end.join
我预计它等同于
Thread.new do loop do
sleep(1)
puts "foo"
end end.join
但事实并非如此。我该如何修复代码?
loop
内的Thread.new{}
是否被解释为方法loop
而不是关键字?方法调用和关键字之间的优先关系是什么?
答案 0 :(得分:2)
loop
是Kernel
上的私有方法。考虑到这一点,我能够这样做:
class Thread
def self.loop &pr
Thread.new{Object.instance_exec{loop{pr.call}}}
end
end
或按照BroiSatse的建议,
class Thread
def self.loop &pr
Thread.new{super{pr.call}}
end
end
它按预期工作。