以下代码 '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}"} )
我不知道这段代码在这里做了什么。我能说的最好的是 |是按位或 -> 是针对 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}"} )