Es ist ärgerlich, dass Sie nicht "->" googeln können - eine gute Frage!
Kevin
10
@ Kevin Sie können jedoch die integrierte elastische Suche von Stack Overflow verwenden, um nach folgenden Elementen zu suchen "->": title:"->" [ruby] is:question. Der Schlüssel ist die Verwendung der Anführungszeichen.
Trennt Schlüssel von Werten in einem Hash-Map-Literal.
->== Dash Rocket
Wird verwendet, um ein Lambda-Literal in Ruby 1.9.X (ohne Argumente) und Ruby 2.X (mit Argumenten) zu definieren. Die Beispiele, die Sie ( ->(x) { x * 2 }& lambda { |x| x * 2 }) geben, sind tatsächlich gleichwertig.
Zu Ihrer Information Die beiden Stile sind nicht vollständig austauschbar, wenn Sie do/ endaufgrund von Vorrangregeln verwenden. Dies druckt ein inspiziertes Lambda : puts -> do 1 end. Dies übergibt den Block an puts, stiehlt ihn aus dem Lambda und verursacht einen ArgumentError:puts lambda do 1 end
Kelvin
1
Auch die Lambda-Literale von Ruby 1.9.3 erlauben Argumente.
Kelvin
3
@ Kelvin das wäre, weil Ruby versucht, puts lambda do 1 endals puts(lambda) do 1 endeher als zu interpretieren puts(lambda do 1 end). Letzteres funktioniert tatsächlich - Ruby versucht nur, den Block an die putsMethode und nicht an die lambdaMethode zu übergeben, wenn keine Klammern vorhanden sind.
PJSCopeland
1
@PJSCopeland Ich sage nicht, dass Sie sie nicht dazu bringen können, dasselbe zu tun. Ich sage, sie sind syntaktisch nicht zu 100% austauschbar, dh Sie können nicht einfach in allen Fällen einen Drop-In-Ersatz durchführen (da Sie manchmal zusätzliche Klammern benötigen lambda).
Kelvin
@rdurand Haben Sie die Bearbeitung mit der Zusammenfassung "Stabby Lambdas können in Ruby 1.9 keine Argumente akzeptieren" vorgenommen? Dies ist zumindest für 1.9.3 nicht korrekt - Argumente sind zulässig.
->(x) { ... }ist das gleiche wie lambda { |x| ... }. Es entsteht ein Lambda. Siehe Kernel # lambda Ein Lambda ist eine Art von Prozess, der sicherstellt, dass die Anzahl der an ihn übergebenen Parameter korrekt ist. Siehe auch Proc :: new und Kernel # proc .
"->"
:title:"->" [ruby] is:question
. Der Schlüssel ist die Verwendung der Anführungszeichen.ruby "->"
ist, wie ich diesen Beitrag gefunden habe :)Antworten:
In der Ruby-Programmiersprache ("Methods, Procs, Lambdas and Closures") wird ein mit definiertes Lambda
->
als Lambda-Literal bezeichnet .Der Code entspricht dem folgenden.
Informell habe ich gehört, dass es Stabby Lambda oder Stabby Literal genannt wird .
quelle
=>
== Hash RocketTrennt Schlüssel von Werten in einem Hash-Map-Literal.
->
== Dash RocketWird verwendet, um ein Lambda-Literal in Ruby 1.9.X (ohne Argumente) und Ruby 2.X (mit Argumenten) zu definieren. Die Beispiele, die Sie (
->(x) { x * 2 }
&lambda { |x| x * 2 }
) geben, sind tatsächlich gleichwertig.quelle
do
/end
aufgrund von Vorrangregeln verwenden. Dies druckt ein inspiziertes Lambda :puts -> do 1 end
. Dies übergibt den Block anputs
, stiehlt ihn aus dem Lambda und verursacht einen ArgumentError:puts lambda do 1 end
puts lambda do 1 end
alsputs(lambda) do 1 end
eher als zu interpretierenputs(lambda do 1 end)
. Letzteres funktioniert tatsächlich - Ruby versucht nur, den Block an dieputs
Methode und nicht an dielambda
Methode zu übergeben, wenn keine Klammern vorhanden sind.lambda
).Lambda-Rakete
Ich habe das aus diesem Artikel. Aber zuerst eine Google-Suche nach Ruby Lambda Kurzschrift http://ruby-journal.com/becareful-with-space-in-lambda-hash-rocket-syntax-between-ruby-1-dot-9-and-2-dot -0 /
quelle
->(x) { ... }
ist das gleiche wielambda { |x| ... }
. Es entsteht ein Lambda. Siehe Kernel # lambda Ein Lambda ist eine Art von Prozess, der sicherstellt, dass die Anzahl der an ihn übergebenen Parameter korrekt ist. Siehe auch Proc :: new und Kernel # proc .quelle