É irritante que você não possa pesquisar no Google -> "- boa pergunta a ser feita!
Kevin
10
@ Kevin você pode, no entanto, usar de Stack Overflow built-in Elastic Pesquisar para procurar "->": title:"->" [ruby] is:question. A chave é usar as aspas.
Separa as chaves dos valores em um literal de mapa de hash.
->== Dash Rocket
Usado para definir um literal lambda no Ruby 1.9.X (sem args) e Ruby 2.X (com args). Os exemplos que você dá ( ->(x) { x * 2 }& lambda { |x| x * 2 }) são de fato equivalentes.
FYI Os dois estilos não são totalmente intercambiáveis se você usar do/ enddevido a regras de precedência. Esta função imprime um lambda inspecionado: puts -> do 1 end. Isto passa do bloco para puts, roubar do lambda e causando um ArgumentError:puts lambda do 1 end
Kelvin
1
Além disso, os literais lambda do ruby 1.9.3 permitem argumentos.
Kelvin #
3
@ Kelvin isso seria porque Ruby tenta interpretar puts lambda do 1 endcomo puts(lambda) do 1 endao invés de puts(lambda do 1 end). De fato, o último funciona - Ruby apenas tenta passar o bloco para o putsmétodo, e não para o lambdamétodo, se não houver colchetes.
PJSCopeland
1
@PJSCopeland Não estou dizendo que você não pode fazê-los agir da mesma maneira. Estou dizendo que eles não são 100% intercambiáveis em termos de sintaxe, ou seja, você não pode simplesmente fazer uma substituição em todos os casos (porque às vezes você precisa de parênteses extras lambda).
Kelvin
@rdurand Você fez a edição com o resumo "Lambdas stabby não podem aceitar argumentos no Ruby 1.9"? Isso não é exato, pelo menos para 1.9.3 - argumentos são permitidos.
->(x) { ... }é o mesmo que lambda { |x| ... }. Cria um lambda. Consulte Kernel # lambda Um lambda é um tipo de proc, que garante que o número de parâmetros passados para ele esteja correto. Veja também Proc :: new e Kernel # proc .
"->"
:title:"->" [ruby] is:question
. A chave é usar as aspas.ruby "->"
é como eu encontrei este post :)Respostas:
Na linguagem de programação Ruby ("Métodos, Procs, Lambdas e Closures"), um lambda definido usando
->
é chamado literal lambda .O código é equivalente ao seguinte.
Informalmente, ouvi dizer que é chamado de stabby lambda ou stabby literal .
fonte
=>
== Hash RocketSepara as chaves dos valores em um literal de mapa de hash.
->
== Dash RocketUsado para definir um literal lambda no Ruby 1.9.X (sem args) e Ruby 2.X (com args). Os exemplos que você dá (
->(x) { x * 2 }
&lambda { |x| x * 2 }
) são de fato equivalentes.fonte
do
/end
devido a regras de precedência. Esta função imprime um lambda inspecionado:puts -> do 1 end
. Isto passa do bloco paraputs
, roubar do lambda e causando um ArgumentError:puts lambda do 1 end
puts lambda do 1 end
comoputs(lambda) do 1 end
ao invés deputs(lambda do 1 end)
. De fato, o último funciona - Ruby apenas tenta passar o bloco para oputs
método, e não para olambda
método, se não houver colchetes.lambda
).Foguete Lambda
Eu entendi isso neste artigo. Mas primeiro uma pesquisa no google por ruby lambda shorthand http://ruby-journal.com/becareful-with-space-in-lambda-hash-rocket-syntax-between-ruby-1-dot-9-and-2-dot -0 /
fonte
->(x) { ... }
é o mesmo quelambda { |x| ... }
. Cria um lambda. Consulte Kernel # lambda Um lambda é um tipo de proc, que garante que o número de parâmetros passados para ele esteja correto. Veja também Proc :: new e Kernel # proc .fonte