Раздражает, что вы не можете гуглить "->" - хороший вопрос!
Кевин
10
@Kevin вы можете, однако, использовать переполнение стека встроенный в упругом Поиск искать "->": title:"->" [ruby] is:question. Ключ заключается в использовании кавычек.
Используется для определения лямбда-литерала в Ruby 1.9.X (без аргументов) и Ruby 2.X (с аргументами). Примеры, которые вы приводите ( ->(x) { x * 2 }& lambda { |x| x * 2 }), фактически эквивалентны.
К вашему сведению 2 стиля не полностью взаимозаменяемы, если вы используете do/ endиз-за правил приоритета. Это печатает проверяемую лямбду: puts -> do 1 end. Это передает блок puts, крадя его из лямбды и вызывая ArgumentError:puts lambda do 1 end
Kelvin
1
Кроме того, лямбда-литералы ruby 1.9.3 допускают аргументы.
Кельвин
3
@Kelvin что бы потому , что Руби пытается интерпретировать , puts lambda do 1 endкак puts(lambda) do 1 endвместо puts(lambda do 1 end). Последний действительно работает - Ruby просто пытается передать блок putsметоду, а не lambdaметоду, если нет скобок.
ПАОПеленд
1
@PJSCopeland Я не говорю, что вы не можете заставить их действовать одинаково. Я говорю, что они не на 100% взаимозаменяемы по синтаксису, то есть вы не можете просто сделать замену во всех случаях (потому что иногда вам нужны дополнительные скобки lambda).
Кельвин
@rdurand Сделали ли вы правку со сводкой «Лямбда не может принимать аргументы в Ruby 1.9»? Это не точно, по крайней мере, для 1.9.3 - аргументы разрешены.
->(x) { ... }так же, как lambda { |x| ... }. Это создает лямбду. См. Ядро # лямбда . Лямбда - это тип процедуры, который гарантирует, что количество переданных ему параметров является правильным. Смотрите также Proc :: new и Kernel # proc .
"->"
:title:"->" [ruby] is:question
. Ключ заключается в использовании кавычек.ruby "->"
я нашел этот пост вОтветы:
В языке программирования Ruby («Методы, процедуры, лямбды и замыкания») лямбда, определенная с использованием
->
, называется лямбда-литералом .Код эквивалентен следующему.
Неофициально, я слышал, что его называют « лямбда- сабли» или « буквально-сабля» .
источник
=>
== Хэш РакетаОтделяет ключи от значений в литерале хэш-карты.
->
== Тире РакетаИспользуется для определения лямбда-литерала в Ruby 1.9.X (без аргументов) и Ruby 2.X (с аргументами). Примеры, которые вы приводите (
->(x) { x * 2 }
&lambda { |x| x * 2 }
), фактически эквивалентны.источник
do
/end
из-за правил приоритета. Это печатает проверяемую лямбду:puts -> do 1 end
. Это передает блокputs
, крадя его из лямбды и вызывая ArgumentError:puts lambda do 1 end
puts lambda do 1 end
какputs(lambda) do 1 end
вместоputs(lambda do 1 end)
. Последний действительно работает - Ruby просто пытается передать блокputs
методу, а неlambda
методу, если нет скобок.lambda
).Лямбда-ракета
Я понял это из этой статьи. Но сначала поиск в Google по рубиновой лямбда-стенографии http://ruby-journal.com/becareful-with-space-in-lambda-hash-rocket-syntax-between-ruby-1-dot-9-and-2-dot -0 /
источник
->(x) { ... }
так же, какlambda { |x| ... }
. Это создает лямбду. См. Ядро # лямбда . Лямбда - это тип процедуры, который гарантирует, что количество переданных ему параметров является правильным. Смотрите также Proc :: new и Kernel # proc .источник