【问题标题】:Ruby Object#send vs. negated equalRuby Object#send vs. negated equal
【发布时间】:2012-03-25 23:03:10
【问题描述】:

为什么 "A".send('!='.to_sym, "B") 在 Ruby 1.8.7 中会引发 NoMethodError 而 "A" != "B" 不会 - 以及 Object.send 的正确语法是什么样的?

【问题讨论】:

    标签: ruby syntax ruby-1.8


    【解决方案1】:

    由于问题的后半部分还没有回答:

    'A'.send(:==, 'B').send(:!) # Ruby 1.9
    
    !'A'.send(:==, 'B')         # Ruby 1.8
    

    【讨论】:

      【解决方案2】:

      != 不是 ruby​​ 1.8 中的方法它是硬连线的否定调用 ==

      【讨论】:

      • 知道 != 在 1.9 中的定义吗?我在 Object 和 String 中都找不到它...
      • @user1196609 您可能错过了它,因为它是用 C 而不是 Ruby 编写的。它位于object.c 并通过rb_define_method(rb_cBasicObject, "!=", rb_obj_not_equal, 1); 定义
      • @Bryan:这完全取决于 Ruby 实现。在 Rubinius 中,它是用 Ruby 编写的,位于 kernel/bootstrap/basicobject.rb 中,看起来像这样:def !=(other) self == other ? false : true end
      猜你喜欢
      • 2019-05-08
      • 2012-05-14
      • 1970-01-01
      • 1970-01-01
      • 2019-06-11
      • 2021-09-28
      • 2011-04-12
      • 1970-01-01
      • 2016-10-31
      相关资源
      最近更新 更多