Когда вы пишете метод, подобный этому:
def foo( a, b, &c )
...
end
Тогда переменная c
устанавливается на экземпляр Proc, если вы передаете блок методу, или устанавливается на nil
, если вы не используетене пройти блок.Поскольку nil
является неверным значением, метод, который вы цитируете, проверяет, был ли передан блок, чтобы решить, следует ли уступать или нет.
Как говорит @ MarcAndréLafortune, лучше код:*.Единственный раз, когда вы хотите захватить блок (о котором я могу подумать):
- Чтобы сохранить его в переменной экземпляра для использования позже:
- например,
@foo = c
а затем позже либо вызовите его и передайте значения (@foo[ 42 ]
), либо передайте его как блок другому методу my_array.select(&@foo)
.
- Или передайте его непосредственно как блокдля других методов, вызываемых вашим методом:
- например,
@my_array = initial_values.select(&c)