你可以把工作方式:
irb> class Pair
def initialize(strA,strB)
@strA,@strB = strA,strB
end
def ==(string)
string == @strA || string == @strB
end
def |(other)
Pair.new(self,other)
end
end
#=> nil
irb> class String
def |(other)
Pair.new(self,other)
end
alias old_equals :==
def ==(other)
if other.kind_of? Pair
other == self
else
old_equals other
end
end
end
#=> nil
irb> ("one"|"two") == "one"
#=> true
irb> ("one"|"two") == "two"
#=> true
irb> ("one"|"two") == "three"
#=> false
irb> "one" == ("one"|"two")
#=> true
irb> "three" == ("one"|"two"|"three")
#=> true
但由於這涉及到一個相當低級類的一些猴子補丁,我不會建議依賴於它。其他人會討厭閱讀你的代碼。
這個問題沒有什麼意義可言。字符串「hi」和「ho」的按位或等於「ho」,因此如果s ==「hi」,則您提出的表達式*將返回false *。如果使用不同的字符串,則按位或運算的結果可能更加荒謬。 – molf 2009-07-09 22:08:47