metaprogramación de rubíes: el bloque de rendimiento no funciona en un método agregado dinámicamente

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

Pregunta

Estoy trabajando en extender el marco NotAMock para los métodos de apéndice en rspec, y obteniendo los talones para ceder a un bloque de métodos.

El código en este Gist funciona perfectamente cuando lo codifico por mi cuenta (que se hace para parecerse a los métodos de apéndices de NotAMock).

pero cuando incorporo el código object.instance_eval ... en el marco NotAMock, " block_given? " siempre devuelve falso y nunca puedo hacer que mi rendimiento funcione debido a eso. El método se agregó correctamente, y puedo llamar al método "stubbed" ... pero no reconocerá el bloque que paso al método, de la versión "Notamock stubbed".

Para ver cómo he incorporado este código en el marco de NotAMock, vaya a mi clone de NotAMock y echa un vistazo a " add_hook " Método en los métodos privados.

Sé que es mucho pedir, espero encontrar alguna orientación. Me ha estado volviendo loco todo el día.

¿Fue útil?

Solución 2

Resulta que el problema no está relacionado con el código al que estoy vinculado ... el marco NotAMock está realizando una redefinición del método adicional que está causando mi problema. He reducido el problema a una línea específica de código y estoy trabajando en cómo solucionarlo ahora.

Otros consejos

Ni siquiera estoy seguro de que esto sea posible. Los nuevos Procs ni siquiera reconocen los bloques.

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

Se supone que Ruby 1.9 permite que los bloques tomen & amp; block como parámetros. Pero no sé si eso funcionará o incluso si permitirá los bloqueos condicionales.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top