我怎樣可以得到下面的代碼工作(我想基於類的arg的後一個動作來決定):紅寶石案例類檢查
def div arg
material = case arg.class
when String
[arg, arg.size]
when Fixnum
arg
end
material
end
我怎樣可以得到下面的代碼工作(我想基於類的arg的後一個動作來決定):紅寶石案例類檢查
def div arg
material = case arg.class
when String
[arg, arg.size]
when Fixnum
arg
end
material
end
在case語句的比較與實現===
- 也稱爲案例平等運算符。對於像String
或Fixnum
這樣的類,它定義爲測試該對象是否是該類的一個實例。因此,而不是一類的只是通過刪除.class
方法調用通過實例的比較:
def div arg
material = case arg
when String
[arg, arg.size]
when Fixnum
arg
end
material
end
在你的榜樣,您分配的情況下塊的局部變量material
的你塊後立即返回結果。這是不必要的,你可以立即返回塊,是什麼使得該方法短一點的結果是:
def div(arg)
case arg
when String
[arg, arg.size]
when Fixnum
arg
end
end
我想我寧願:
def div(arg)
return arg if arg.is_a? Fixnum
[arg, arg.size] if arg.is_a? String
end
使用此版本,您可能會遇到NoMethodError異常(例如,使用'div(1.1)'。 – knut
我建議你提供一個解釋。 –
Sehrschön! :-) – amirteymuri