Der Code tut noch nichts. Es ist eine korrekte (aber irgendwie komische) Syntax, und das definierte Lambda tut nichts.
|
ist nicht bitweise OR, es ist eine Methode Name der Thread
Klasse, für die ruby-thread
Juwel:
require 'thread/pipe'
p = Thread |-> d { d * 2 } |-> d { d * 4 }
p << 2
puts ~p # => 16
Aber du hast Recht, obwohl es möglich ist, |
dann Methode aufrufen, ohne a .
zwischen Thread
und dem Methodennamen, weil die Ruby-Syntax Code wie 2 | 3
als Zucker für 2.|(3)
zulässt.
Ohne das Juwel beschwert sich Ruby über eine NoMethodError
. Um ein wenig mit der Syntax zu spielen, könnten Sie versuchen:
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
Es gibt:
Inside a proc, called from 'Thread.|' with parameter some_param
Eine weitere Möglichkeit, den Anruf zu schreiben wäre:
pipe = Thread.|(lambda{|param| puts "Inside a proc, called from 'Thread.|' with parameter #{param}"})
In rubin der Code tut " NoMethodError: undefinierte Methode '| ' für Thread: Klasse ":) –