线程和循环

时间:2014-08-21 09:06:29

标签: ruby multithreading loops

我正在尝试编写此代码的等效代码:

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而不是关键字?方法调用和关键字之间的优先关系是什么?

1 个答案:

答案 0 :(得分:2)

tadman和Stefan让我意识到loopKernel上的私有方法。考虑到这一点,我能够这样做:

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

它按预期工作。