rubi metaprogramação - bloco de rendimento não funciona no método adicionado dinamicamente

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

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.

Foi útil?

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.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top