我无法弄清楚这段代码的作用。我能说的最好的是|是逐位OR和 - >是为了一个lambda,但仍然无法将它作为一个整体来理解。
pipe = Thread | -> (p) do
end
答案 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}"} )