我想要超调发送对象,就像这样
class Object
@@object_send = self.instance_method( :send )
def send *args
@@object_send.bind( self ).call *args
end
end或
class Object
def send *args
__send__ *args
end
end或
class Object
alias_method :old_send, :send
def send *args
old_send *args
end
end但是,所有这些选项都会导致出现此错误。
/opt/local/lib/ruby1.9/gems/1.9.1/gems/minitest-2.8.1/lib/minitest/unit.rb:871:in `block in process_args': unsupported argument type: Integer (ArgumentError)
from /opt/local/lib/ruby1.9/gems/1.9.1/gems/minitest-2.8.1/lib/minitest/unit.rb:862:in `new'
from /opt/local/lib/ruby1.9/gems/1.9.1/gems/minitest-2.8.1/lib/minitest/unit.rb:862:in `process_args'
from /opt/local/lib/ruby1.9/gems/1.9.1/gems/minitest-2.8.1/lib/minitest/unit.rb:912:in `_run'
from /opt/local/lib/ruby1.9/gems/1.9.1/gems/minitest-2.8.1/lib/minitest/unit.rb:905:in `run'
from /opt/local/lib/ruby1.9/gems/1.9.1/gems/minitest-2.8.1/lib/minitest/unit.rb:685:in `block in autorun'有什么我能做的吗?
更新:尝试更新到2.9.1,但这并没有解决问题
发布于 2011-12-19 23:07:52
如果没有MWE,我很难分析你的问题。也许我找到了你问题的第一个提示。
我试着重建错误,但没有成功:
class Object
alias_method :old_send, :send
def send *args
old_send *args
end
end
n = 5
puts n.send(:*, 2)我得到了10。
但是我遇到了一个问题:
puts n.send(:times){ |i| p i } #-> #<Enumerator:0xb778a8>稍加修改,您就可以看到发生了什么:
class Object
alias_method :old_send, :send
def send *args
puts "send called with #{args}" #--> [:times]
old_send *args
end
end
n = 5
n.send(:times){ |i| p i }你会得到
send called with [:times]街区不见了。必须将proc-参数添加到重新定义中:
class Object
alias_method :old_send, :send
def send *args, &proc
old_send *args, &proc
end
end
n = 5
n.send(:times){ |i| p i } #-> 1 2 3 4 5https://stackoverflow.com/questions/8568285
复制相似问题