метапрограммирование ruby ​​- блок yield не работает в динамически добавленном методе

StackOverflow https://stackoverflow.com/questions/1604776

Вопрос

Я работаю над расширением 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; блок в качестве параметров. Но я не знаю, сработает ли это или даже разрешит условные блоки.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top