当前位置:  开发笔记 > 编程语言 > 正文

如何覆盖ruby case相等运算符?(===)

如何解决《如何覆盖rubycase相等运算符?(===)》经验,为你挑选了1个好方法。

我有一个类,我想在case语句中比较字符串和符号,所以我认为我只是覆盖我的类的===()方法,所有都是金.但是在case语句中永远不会调用我的===()方法.有任何想法吗?

以下是一些示例代码,以及irb会话中发生的情况:

class A
   def initialize(x)
      @x=x #note this isn't even required for this example
   end
   def ===(other)
      puts "in ==="
      return true
   end
end

irb(main):010:0> a = A.new("hi")
=>#
irb(main):011:0> case a
irb(main):012:1>当"hi"然后是1
irb( main):013:1> else 2
irb(main):014:1> end
=> 2

(它从不打印消息,无论如何应该总是返回true)注意理想情况下我想做一个

def ===(other)
          #puts "in ==="
          return @x.===(other)
end

提前致谢.



1> janm..:

'case'关键字后面的表达式是===表达式的右侧,'when'关键字后面的表达式位于表达式的左侧.因此,被调用的方法是String.===,而不是A.===.

快速逆转比较的方法:

class Revcomp
    def initialize(obj)
        @obj = obj
    end

    def ===(other)
        other === @obj
    end

    def self.rev(obj)
        Revcomp.new(obj)
    end
end

class Test
    def ===(other)
        puts "here"
    end
end

t = Test.new

case t
when Revcomp.rev("abc")
    puts "there"
else
    puts "somewhere"
end

推荐阅读
mobiledu2402851203
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有