Есть ли сокращение для {| x |фу х}? - PullRequest
6 голосов
/ 01 октября 2019

Я определил метод, который я хочу применить к списку:

class Foobar
  def foo(x)
    x+1
  end

  def bar(list)
    list.map {|x| foo x}
  end
end

Я ожидал, что смогу сделать что-то вроде list.map(foo), так как создание лямбда-функции, которая кажется довольно избыточной,просто применяет свои аргументы к функции.

Ответы [ 2 ]

5 голосов
/ 01 октября 2019

Вы можете сослаться на метод для передачи как proc с помощью method:

list.map(&method(:foo))

Может быть, это не тот ярлык, который вы ищете, поскольку он ограничен работой с методами, которые ожидают только один аргумент иуменьшает читабельность.

2 голосов
/ 01 октября 2019

Добавление немного большего контекста к ответу , предоставленному Себастьяном Пальмой .

method(:foo)

Возвращает метод foo текущего экземпляра (self). Вы также можете использовать это в сочетании с другими экземплярами:

(1..10).map(&5.method(:+))
#=> [6, 7, 8, 9, 10, 11, 12, 13, 14, 15]

Здесь 5.method(:+) возвращает метод + для экземпляра 5.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...