2014-01-14 56 views

回答

1

使用is_a?

def your_method(param) 
    if param.is_a? String 
     # it's a string 
    else 
     # not a string 
    end 
end 

或者,如果你有很多的類來檢查,一case聲明:

def your_method(param) 
    case param 
    when String 
     # it's a string 
    when Array 
     # it's an array 
    when Rational 
     # it's a rational 
    # ... 
    else 
     # it's not any of these classes 
    end 
end 
+0

謝謝。 –

1

它是由主叫方提供正確類型的參數。如果使用不支持類型的參數調用方法,則在Ruby中通常會引發ArgumentError。例如:

def do_something_with_a_number(number) 
    raise ArgumentError, "you have to provide a number" unless number.is_a?(Fixnum) 
    ... 
end 
3

檢查其類型。

這就是說,爲什麼?一般來說,你應該關心它的傾向,而不是它的類型。當某種東西與其類型聯繫在一起時,我通常會懷疑它。

+0

+1。具體而言,'parameter.respond_to?(:method_i_want)'優於'parameter.is_a?(ClassIWant)'。 – Amadan

+0

錯誤檢查。假設你的方法需要一個字符串,而一些白癡程序員傳遞一個數字。不可能使用強類型語言,可能喜歡Runy,PHP或Python。 –

+0

@ DariuszG.Jagielski我不明白你想說什麼。我說要檢查它的類型,但是再一次,最好檢查它的接口。 –

相關問題