Предположим, у меня есть метод foo, который требует лямбда-параметра. Лямбда вызывается foo с аргументами. На самом деле я не хочу, чтобы при выполнении лямбды что-либо происходило.

В настоящее время я делаю это:

foo(->(*) {})

Это выглядит немного некрасиво, и я должен верить, что есть более элегантный и разборчивый способ написать это, встроенный в язык Ruby.

Есть ли лучший способ передать лямбду "ничего не делать"?

1
Aaron Christiansen 11 Сен 2018 в 21:53

1 ответ

Лучший ответ

Я бы рекомендовал вместо этого переосмыслить foo.

При этом я не думаю, что есть более элегантный способ, но если вы действительно хотите, вы можете добавить что-то вроде этого (что, на мой взгляд, уродливее, чем то, что у вас есть)

module Kernel
  def noop
    Proc.new {}
  end
end

Тогда позвони как

def foo(blk)
  blk.call(1,2,3,4,5)
end

foo(noop) 
#=> nil
3
engineersmnky 11 Сен 2018 в 19:21