Фабрика методов идентификации в Ruby

#ruby #ruby-stdlib

Вопрос:

Есть ли в Ruby ярлык для получения лямбды, которая просто возвращает свой аргумент?

Я пытаюсь выполнить следующую функцию:

 def some_method(x, y, decorator = ->(x) { x })
  …
end
 

Переписано так, чтобы выглядеть как-то похоже

 def some_method(x, y, decorator = method(:itself))
  …
end
 

Может быть, есть способ сменить приемник Object#itself ?

Ответ №1:

Вы, вероятно, много раз видели подобный код в ruby:

 array.map(amp;:upcase)
 

Ну, а что amp;:upcase на самом деле означает? Это на самом деле звонок Symbol#to_proc .

Поэтому вы можете определить метод следующим образом:

 def some_method(x, y, decorator = :itself.to_proc)
  # ...
end