rubi metaprogramação - bloco de rendimento não funciona no método adicionado dinamicamente
-
05-07-2019 - |
Pergunta
Eu estou trabalhando em estender a NotAMock estrutura para arrancar métodos em rspec, e recebendo os tocos para produzir a um bloco de métodos.
O href="http://gist.github.com/215637" rel="nofollow noreferrer" title="simple código example"> funciona perfeitamente quando eu código-lo no meu próprio (que é feito-up para assemelhar-se como os métodos NotAMock canhotos).
mas quando eu incorporar a object.instance_eval ... código no quadro NotAMock, o "block_given?" sempre retorna false e eu nunca pode obter o meu rendimento ao trabalho por causa disso. O método é adicionado corretamente, e eu posso chamar o método stubbed ... mas não vai reconhecer o bloco que eu passar para o método, a partir da versão NotAMock apagou.
Para ver como eu ter incorporado este código no quadro NotAMock, vá para minha clone de NotAMock e confira o método "add_hook" nos métodos privados.
Eu sei que isso é um pouco demais para perguntar ... Eu estou esperando encontrar alguma orientação. ele foi me deixando louco todo o dia.
Solução 2
Acontece que o problema não está relacionado com o código que eu ligado a ... quadro NotAMock está fazendo algum método re-definição adicional que está causando o meu problema. Eu reduzi o problema para baixo a uma linha específica de código, e estou trabalhando para fora como corrigi-lo agora.
Outras dicas
Eu nem tenho certeza que isso é possível. New Procs nem sequer reconhecer blocos.
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 é suposto para permitir blocos para tirar e bloquear como parâmetros. Mas eu não sei se isso vai funcionar ou mesmo se ele permitirá que os blocos condicionais.