Может ли proc выполняться без использования метода call? - PullRequest
1 голос
/ 24 января 2009

Я поднимаю отдельный вопрос из здесь . Это действительно смутило меня. Вот определение метода add_mapping:

def add_mapping(regexp, &proc)
  @test_mappings << [regexp, proc]
end

Как можно proc здесь выполнить и вернуть результат без использования метода call?

Ответы [ 3 ]

3 голосов
/ 24 января 2009

Эрик, add_mapping делает просто добавление регулярного кортежа expresion + proc в массив с именем @ test_mappings.

add_mappings не выполняет процедуру. Я не знаю, как работает ZenTest, но он должен выполнять процедуры после прочтения всех вызовов add_mapping.

Проверьте код ZenTest и найдите @test_mappings, который может показать вам, где (и когда) выполняется процедура.

1 голос
/ 25 января 2009

Процедуру можно выполнить, передав ее в виде блока в метод уступки или вызвав ее вручную (как вы упоминаете).

a_proc = proc { puts "The proc" }

def i_am_yielding
  yield
end

a_proc.call
# => "The proc"
i_am_yielding { puts "A block" }
# => "A block"
i_am_yielding(&a_proc)
# => "The proc"

Возможно, есть и другие способы, но я не могу придумать ни одного. Я не уверен, что это значит в вашем конкретном случае, хотя. Этот процесс находится внутри массива, который добавляется в другой массив (я полагаю), и на него вообще не ссылаются, поэтому в этом коротком фрагменте, который вы вставляете, не будет вызываться никаких процедур

0 голосов
/ 24 января 2009

Да, согласно документации , [] является синонимом Proc#call.

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