下面的代码"线程 |->在红宝石中做什么?



我无法弄清此代码在这里做什么。我能说的最好的是是位的,还是 ->是用于lambda的,但仍然无法整体上有意义。

pipe = Thread | -> (p) do
       end

代码还没有任何作用。这是一个正确的(但有点奇怪(语法,而定义的lambda无需做任何事情。

|不咬合或,这是Thread类的方法名称,对于ruby-thread GEM:

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}"} )

最新更新