不太确定你在找什么,但也许是这样的?
class CaseMatchingArray < Array
def ===(element)
self.include?(element)
end
end
direction = CaseMatchingArray.new([
'up', 'upper-right', 'right', 'lower-right',
'down', 'lower-left', 'left', 'upper-left'])
case 'up'
when direction
puts "Yup, it's a direction"
end
请记住,Rubycase
语句应用了===
运算符,您可以通过匹配实现它的事物来进行任何您希望的测试。如果您还记得它Proc
也===
作为调用实现,您可以这样做:
direction = lambda { |x|
[
'up', 'upper-right', 'right', 'lower-right',
'down', 'lower-left', 'left', 'upper-left'
].include?(x)
}
并具有相同的结果,而无需定义类。或者你甚至可以在一个单例中做到这一点:
direction = [
'up', 'upper-right', 'right', 'lower-right',
'down', 'lower-left', 'left', 'upper-left'
]
def direction.===(other)
self.include?(other)
end
编辑:或者 Chuck 所说的 :) 虽然,实现定义===
的对象更通用,不仅限于数组的成员资格。