¿Cómo se llama al
->
operador de la siguiente manera?->(...) do ... end
¿No son equivalentes los siguientes fragmentos?
succ = ->(x) {x + 1} succ = lambda {|x| x + 1}
En Ruby Programming Language ("Métodos, Procs, Lambdas y Closures"), un lambda definido usando ->
se llama lambda literal .
succ = ->(x){ x+1 }
succ.call(2)
El código es equivalente al siguiente.
succ = lambda { |x| x + 1 }
succ.call(2)
Informalmente, he escuchado que se llama stabby lambda o stabby literal .
=>
== Hash RocketSepara las claves de los valores en un literal de mapa hash.
->
== Dash RocketSe utiliza para definir un literal lambda en Ruby 1.9.X (sin args) y Ruby 2.X (con args). Los ejemplos que da ( ->(x) { x * 2 }
& lambda { |x| x * 2 }
) son de hecho equivalentes.
do
/ end
debido a las reglas de precedencia. Esto imprime una lambda inspeccionado: puts -> do 1 end
. Esto pasa el bloque a puts
, robándolo de la lambda y causando un ArgumentError:puts lambda do 1 end
puts lambda do 1 end
en puts(lambda) do 1 end
lugar de hacerlo puts(lambda do 1 end)
. De hecho, esto último funciona: Ruby solo intenta pasar el bloque al puts
método en lugar del lambda
método si no hay corchetes.
lambda
).
Cohete lambda
Lo obtuve de este artículo. Pero primero, una búsqueda en Google para la abreviatura de Ruby Lambda http://ruby-journal.com/becareful-with-space-in-lambda-hash-rocket-syntax-between-ruby-1-dot-9-and-2-dot -0 /
->(x) { ... }
es el mismo que lambda { |x| ... }
. Crea una lambda. Ver Kernel # lambda Un lambda es un tipo de proceso, uno que garantiza que el número de parámetros que se le pasan es correcto. Vea también Proc :: new y Kernel # proc .
"->"
:title:"->" [ruby] is:question
. La clave es usar las comillas.ruby "->"
es cómo encontré esta publicación :)