метапрограммирование ruby - блок yield не работает в динамически добавленном методе
-
05-07-2019 - |
Вопрос
Я работаю над расширением NotAMock инфраструктуры для создания заглушек в rspec, и получение заглушек для передачи в блок методов.
код в этом Gist отлично работает, когда я его кодирую по своему усмотрению (что сделано для того, чтобы походить на методы-заглушки NotAMock).
но когда я включаю код object.instance_eval ... в инфраструктуру NotAMock, " block_given? " всегда возвращает ложь, и я никогда не могу получить свою отдачу от работы из-за этого. Метод добавлен правильно, и я могу вызвать метод-заглушку ... но он не распознает блок, который я передаю методу, из версии-заглушки NotAMock.
Чтобы увидеть, как я включил этот код в среду NotAMock, перейдите на страницу моего клон NotAMock и проверьте " add_hook " метод в частных методах.
Я знаю, что это немного, чтобы спросить ... я надеюсь найти какое-то руководство. это сводило меня с ума весь день.
Решение 2
Оказывается, что проблема не связана с кодом, на который я ссылался ... платформа NotAMock выполняет какое-то дополнительное определение метода, которое вызывает мою проблему. Я сузил проблему до одной конкретной строки кода и сейчас решаю, как ее исправить.
Другие советы
Я даже не уверен, что это возможно. Новые Procs даже не распознают блоки.
proc = Proc.new do
if block_given?
yield
else
puts "Not in a block"
end
end
proc.call { puts "In a block"} # => puts Not in a block
Ruby 1.9 должен позволять блокам принимать & amp; блок в качестве параметров. Но я не знаю, сработает ли это или даже разрешит условные блоки.