Что вы называете оператором → в Ruby?

  • Как вы называете оператор -> следующим образом?

    ->(...) do
      ...
    end
    
  • Не эквивалентны следующие фрагменты?

    succ = ->(x) {x + 1}
    succ = lambda {|x| x + 1}
    

Ответ 1

В языке программирования Ruby ("Методы, процедуры, лямбды и замыкания") лямбда, определенная с помощью ->, называется лямбда-литералом.

succ = ->(x){ x+1 }
succ.call(2)

Код эквивалентен следующему.

succ = lambda { |x| x + 1 }
succ.call(2)

Неофициально, я слышал, что его называют "лямбда-сабли" или "буквально-сабля".

Ответ 2

=> == Хэш-ракета

Отделяет ключи от значений в хеш-символе.


-> == Dash Rocket

Используется для определения лямбда-литерала в Ruby 1.9.X(без аргументов) и Ruby 2.X(с аргументами). Примеры, которые вы даете (->(x) { x * 2 } и lambda { |x| x * 2 }), фактически эквивалентны.

Ответ 4

->(x) {... } - то же самое, что и lambda { |x|... } lambda { |x|... } Это создает лямбду. См. Ядро # лямбда. Лямбда - это тип процедуры, который гарантирует, что количество переданных ему параметров является правильным. Смотрите также Proc :: new и Kernel # proc.