以下代码' Thread | - >'做红宝石?

时间:2017-06-23 11:34:09

标签: ruby-on-rails ruby threadpool

我无法弄清楚这段代码的作用。我能说的最好的是|是逐位OR和 - >是为了一个lambda,但仍然无法将它作为一个整体来理解。

pipe = Thread | -> (p) do
       end

1 个答案:

答案 0 :(得分:4)

代码还没有做任何事情。这是一个正确的(但有点奇怪的)语法,并且定义的lambda没有做任何事情。

|不是按位OR,它是ruby-thread类的Thread类的方法名称:

require 'thread/pipe'

p = Thread |-> d { d * 2 } |-> d { d * 4 }
p << 2

puts ~p # => 16

但是你是对的,可以在|和方法名称之间使用.来调用方法Thread,因为Ruby的语法允许像2 | 3之类的代码作为2.|(3)的糖。

没有宝石,Ruby会抱怨NoMethodError。要使用语法,您可以尝试:

class Thread
  def self.|(some_proc)
    some_proc.call("some_param")
  end
end

pipe = Thread | -> (p) do
  puts "Inside a proc, called from 'Thread.|' with parameter #{p}"
end

输出:

Inside a proc, called from 'Thread.|' with parameter some_param

写这个电话的另一种方式是:

pipe = Thread.|( lambda{|param| puts "Inside a proc, called from 'Thread.|' with parameter #{param}"} )