To denerwujące, że nie możesz wyszukiwać w Google „->” - dobre pytanie!
Kevin
10
@Kevin można jednak użyć przepełnienia stosu wbudowanej Elastic Search do wyszukiwania "->": title:"->" [ruby] is:question. Kluczem jest użycie cudzysłowów.
Oddziela klucze od wartości w literale mapy skrótów.
->== Rakieta Dash
Służy do definiowania literału lambda w Ruby 1.9.X (bez argumentów) i Ruby 2.X (z argumentami). Podane przykłady ( ->(x) { x * 2 }i lambda { |x| x * 2 }) są w rzeczywistości równoważne.
FYI 2 style nie są w pełni zamienne, jeśli używasz do/ z endpowodu reguł pierwszeństwa. Drukuje kontrolowanej lambda puts -> do 1 end. To przekazuje blok do puts, kradnąc go z lambda i powodując ArgumentError:puts lambda do 1 end
Kelvin
1
Również literały lambda ruby 1.9.3 pozwalają na argumenty.
Kelvin,
3
@Kelvin byłoby tak, ponieważ Ruby próbuje interpretować puts lambda do 1 endjako puts(lambda) do 1 endzamiast puts(lambda do 1 end). Ta ostatnia faktycznie działa - Ruby po prostu próbuje przekazać blok do putsmetody, a nie do lambdametody, jeśli nie ma nawiasów.
PJSCopeland
1
@PJSCopeland Nie mówię, że nie można ich zmusić do działania tak samo. Mówię, że nie są one w 100% wymienne pod względem składni, tzn. Nie można po prostu zastąpić drop-in we wszystkich przypadkach (ponieważ czasami potrzebujesz dodatkowych nawiasów lambda).
Kelvin,
@rdurand Czy dokonałeś edycji streszczeniem „Stabby lambdas nie akceptuje argumentów w Ruby 1.9”? To nie jest dokładne, przynajmniej dla 1.9.3 - dozwolone są argumenty.
->(x) { ... }jest taki sam jak lambda { |x| ... }. Tworzy lambda. Zobacz jądro # lambda lambda jest rodzajem proc, który zapewnia poprawność liczby przekazywanych parametrów. Zobacz także Proc :: new i Kernel # proc .
"->"
:title:"->" [ruby] is:question
. Kluczem jest użycie cudzysłowów.ruby "->"
to sposób, w jaki znalazłem ten post :)Odpowiedzi:
W języku programowania Ruby („Methods, Procs, Lambdas and Closures”) lambda zdefiniowana za pomocą
->
nazywana jest literałem lambda .Kod jest równoważny z następującym.
Nieoficjalnie słyszałem, że nazywa się to stabby lambda lub stabby dosłownie .
źródło
=>
== Hash RocketOddziela klucze od wartości w literale mapy skrótów.
->
== Rakieta DashSłuży do definiowania literału lambda w Ruby 1.9.X (bez argumentów) i Ruby 2.X (z argumentami). Podane przykłady (
->(x) { x * 2 }
ilambda { |x| x * 2 }
) są w rzeczywistości równoważne.źródło
do
/ zend
powodu reguł pierwszeństwa. Drukuje kontrolowanej lambdaputs -> do 1 end
. To przekazuje blok doputs
, kradnąc go z lambda i powodując ArgumentError:puts lambda do 1 end
puts lambda do 1 end
jakoputs(lambda) do 1 end
zamiastputs(lambda do 1 end)
. Ta ostatnia faktycznie działa - Ruby po prostu próbuje przekazać blok doputs
metody, a nie dolambda
metody, jeśli nie ma nawiasów.lambda
).Rakieta Lambda
Mam to z tego artykułu. Ale najpierw wyszukaj w Google ruby lambda shorthand http://ruby-journal.com/becareful-with-space-in-lambda-hash-rocket-syntax-between-ruby-1-dot-9-and-2-dot -0 /
źródło
->(x) { ... }
jest taki sam jaklambda { |x| ... }
. Tworzy lambda. Zobacz jądro # lambda lambda jest rodzajem proc, który zapewnia poprawność liczby przekazywanych parametrów. Zobacz także Proc :: new i Kernel # proc .źródło