以下代码 'Thread | ->' 在 ruby 中会做什么?

What would the following code 'Thread | ->' do in ruby?

我不知道这段代码在这里做了什么。我能说的最好的是 |是按位或 -> 是针对 lambda,但仍然无法理解它作为一个整体。

pipe = Thread | -> (p) do
       end

该代码尚未执行任何操作。这是一个正确的(但有点奇怪)语法,定义的 lambda 没有做任何事情。

| 不是按位或,它是 Thread class 的方法名称,对于 ruby-thread gem:

require 'thread/pipe'

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

puts ~p # => 16

但是你是对的,可以调用 then 方法 | 而无需在 Thread 和方法名称之间使用 .,因为 Ruby 的语法允许像 2 | 3 这样的代码作为 2.|(3).

的糖

没有 gem,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}"} )