我想比较一个case语句的多个变量,并且我正在考虑重写case equals operator(===)for Array是最好的方法.这是最好的方法吗?
这是一个示例用例:
def deposit_apr deposit,apr
# deposit: can be nil or 2 length Array of [nil or Float, String]
# apr: can be nil or Float
case [deposit,apr]
when [[Float,String],Float]
puts "#{deposit[0]} #{deposit[1]}, #{apr*100.0}% APR"
when [[nil,String],Float]
puts "#{apr*100.0}% APR on deposits greater than 100 #{deposit[1]}"
when [[Float,String],nil]
puts "#{deposit[0]} #{deposit[1]}"
else
puts 'N/A'
end
end
Run Code Online (Sandbox Code Playgroud)
唯一的问题是Array case equals运算符不适用大小等于Array的元素.
ruby-1.9.2-p0 > deposit_apr([656.00,'rupees'],0.065)
N/A
Run Code Online (Sandbox Code Playgroud)
如果我覆盖它,但我不确定如果我做了什么我会破坏:
class Array
def ===(other)
result = true
self.zip(other) {|bp,ap| result &&= bp === …Run Code Online (Sandbox Code Playgroud)