2017-05-13 53 views
1

我怎樣可以得到下面的代碼工作(我想基於類的arg的後一個動作來決定):紅寶石案例類檢查

def div arg 
    material = case arg.class 
      when String 
       [arg, arg.size] 
      when Fixnum 
       arg 
      end 
    material 
end 

回答

3

在case語句的比較與實現=== - 也稱爲案例平等運算符。對於像StringFixnum這樣的類,它定義爲測試該對象是否是該類的一個實例。因此,而不是一類的只是通過刪除.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 
+0

我建議你提供一個解釋。 –

+0

Sehrschön! :-) – amirteymuri

0

我想我寧願:

def div(arg) 
    return arg if arg.is_a? Fixnum 
    [arg, arg.size] if arg.is_a? String 
end 
+1

使用此版本,您可能會遇到NoMethodError異常(例如,使用'div(1.1)'。 – knut