我想比較一個case語句的多個變量,並且當前正在考慮覆蓋數組的等號運算符(===)是執行此操作的最佳方式。這是最好的方法嗎?使用數組的多個變量的Ruby case語句
下面是一個例子用例:
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
唯一的問題是陣列情況下等於操作者不適等於所述數組的元素的情況。
ruby-1.9.2-p0 > deposit_apr([656.00,'rupees'],0.065)
N/A
它將如果我重寫,但我不知道如果我這樣做我會打破:
class Array
def ===(other)
result = true
self.zip(other) {|bp,ap| result &&= bp === ap}
result
end
end
現在,所有的工作:
ruby-1.9.2-p0 > deposit_apr([656.00,'rupees'],0.065)
656.0 rupees, 6.5% APR
我錯過什麼?