首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MiniTest崩溃了

MiniTest崩溃了
EN

Stack Overflow用户
提问于 2011-12-19 22:16:04
回答 1查看 109关注 0票数 0

我想要超调发送对象,就像这样

代码语言:javascript
复制
class Object
    @@object_send = self.instance_method( :send )

    def send *args
        @@object_send.bind( self ).call *args
    end
end

代码语言:javascript
复制
class Object
    def send *args
        __send__ *args
    end
end

代码语言:javascript
复制
class Object
    alias_method :old_send, :send

    def send *args
        old_send *args
    end
end

但是,所有这些选项都会导致出现此错误。

代码语言:javascript
复制
/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,但这并没有解决问题

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-12-19 23:07:52

如果没有MWE,我很难分析你的问题。也许我找到了你问题的第一个提示。

我试着重建错误,但没有成功:

代码语言:javascript
复制
class Object
    alias_method :old_send, :send

    def send *args
        old_send *args
    end
end
n = 5
puts n.send(:*, 2)

我得到了10

但是我遇到了一个问题:

代码语言:javascript
复制
puts n.send(:times){ |i| p i } #-> #<Enumerator:0xb778a8>

稍加修改,您就可以看到发生了什么:

代码语言:javascript
复制
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 }

你会得到

代码语言:javascript
复制
send called with [:times]

街区不见了。必须将proc-参数添加到重新定义中:

代码语言:javascript
复制
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 5
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8568285

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档