Es molesto que no puedas google "->" - ¡buena pregunta!
Kevin
10
@ Kevin se puede, sin embargo, el uso de desbordamiento de la pila incorporada elástico Buscar para buscar "->": title:"->" [ruby] is:question. La clave es usar las comillas.
Separa las claves de los valores en un literal de mapa hash.
->== Dash Rocket
Se 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.
FYI Los 2 estilos no son totalmente intercambiables si usa do/ enddebido 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
Kelvin
1
Además, los literales lambda de ruby 1.9.3 permiten argumentos.
Kelvin
3
@Kelvin eso sería porque Ruby intenta interpretarlo puts lambda do 1 enden puts(lambda) do 1 endlugar de hacerlo puts(lambda do 1 end). De hecho, esto último funciona: Ruby solo intenta pasar el bloque al putsmétodo en lugar del lambdamétodo si no hay corchetes.
PJSCopeland
1
@PJSCopeland No digo que no puedas hacer que actúen igual. Estoy diciendo que no son 100% intercambiables en cuanto a sintaxis, es decir, no puedes simplemente hacer un reemplazo directo en todos los casos (porque a veces necesitas paréntesis adicionales para lambda).
Kelvin
@rdurand ¿Hizo la edición con el resumen "Stabby lambdas no puede aceptar argumentos en Ruby 1.9"? Esto no es exacto, al menos para 1.9.3 - se permiten argumentos.
->(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 :)Respuestas:
En Ruby Programming Language ("Métodos, Procs, Lambdas y Closures"), un lambda definido usando
->
se llama lambda literal .El código es equivalente al siguiente.
Informalmente, he escuchado que se llama stabby lambda o stabby literal .
fuente
=>
== 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.fuente
do
/end
debido a las reglas de precedencia. Esto imprime una lambda inspeccionado:puts -> do 1 end
. Esto pasa el bloque aputs
, robándolo de la lambda y causando un ArgumentError:puts lambda do 1 end
puts lambda do 1 end
enputs(lambda) do 1 end
lugar de hacerloputs(lambda do 1 end)
. De hecho, esto último funciona: Ruby solo intenta pasar el bloque alputs
método en lugar dellambda
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 /
fuente
->(x) { ... }
es el mismo quelambda { |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 .fuente