Рубин: приносить блок из блока? - PullRequest
10 голосов
/ 21 октября 2009

Возможно ли для lambda, proc, method или другого типа блока в рубине уступить другому блоку?
что-то вроде ...

a = lambda {
  puts 'in a'
  yield if block_given?
}

a.call { puts "in a's block" }

это не работает ... просто выдает

in a
=> nil

Есть ли способ получить блок для вызова блока?

Ответы [ 2 ]

8 голосов
/ 21 октября 2009

Я не уверен, что если вы можете, вы можете сделать это, но что-то похожее будет:

В Ruby 1.8.6:

a = lambda { |my_proc|
  puts 'in a'
  my_proc.call
}

a.call(lambda { puts "in a's block" })

В Ruby 1.9.1 вы можете иметь параметры блока

a = lambda { |&block|
  puts 'in a'
  block.call
}

a.call { puts "in a's block" }
8 голосов
/ 21 октября 2009

Вы можете вызвать блок, который похож на сдачу.

a = lambda {|&block| block.call if block}
a.call {print "hello"}

Обратите внимание, что

a.call

Не вернет ошибку.

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