回答
我認爲您正在尋找instance_of?
。 is_a?
和kind_of?
將從派生類的實例返回true。
class X < String
end
foo = X.new
foo.is_a? String # true
foo.kind_of? String # true
foo.instance_of? String # false
foo.instance_of? X # true
你可以這樣做:
foo.instance_of?(String)
而且更普遍的:
foo.kind_of?(String)
是什麼讓'kind_of'更普遍?它們似乎是同義詞:['is_a'](http://ruby-doc.org/docs/ProgrammingRuby/html/ref_c_object.html#Object.is_a_qm)。 – davidchambers
@Davidchambers你說得對,'kind_of?'是'is_a?'的同義詞。 – steenslag
@davidchambers:你說得對,我的意思是'instance_of?'而不是'is_a?'。 –
foo.instance_of? String
或
foo.kind_of? String
如果你O只有關心,如果它是從String
derrived從它的繼承鏈的某處
更鴨打字的方法是說
foo.respond_to?(:to_str)
to_str
表明一個對象的類可能不是字符串的實際後裔,但對象本身是非常弦(弦?)。
很酷。在這種情況下,我碰巧知道'foo'將會是'true','false'或香草串,但是學習更通用的解決方案是很好的。 – davidchambers
在檢查對象是否響應之後,將它與to_s調用結合起來,並且爲自己創建了一個字符串! – seanmakesgames
@seanmakesgames你的意思是'to_str'還是'to_s'?兩者略有不同。 –
除了其他答案,Class定義了方法===來測試一個對象是否是該類的一個實例。
- o.class o類。
- o.instance_of? c確定是否o.class == c
- o.is_a? c o是c還是它的任何子類的實例?
- o.kind_of? c * is_a *的同義詞*
- c === o對於類或模塊,確定是否* o.is_a? C *(串=== 「S」返回true)
我認爲更好的辦法是創建一些謂詞的方法。 這也將節省您的「單點控制」。
class Object
def is_string?
false
end
end
class String
def is_string?
true
end
end
print "test".is_string? #=> true
print 1.is_string? #=> false
更鴨打字的方式;)
「string」.is_a?(String)'有什麼問題?看起來你正在重新發明輪子。還有'class','instance_of','kind_of'等等......不好意思去猴子修補Object類,更不用說它是不必要的。 – Mohamad
我完全同意你的觀點:)如果你只關注primitve類型,並且你知道你的項目需求與原始類型相關的將永遠不會改變(確定它通常是這種情況;))你很好。但是在需求改變爲擁有「單一控制點」的情況下。例如在你的項目環境中,你有很多預先檢查(1000以上)。 'pre_check(「test」.is_string?)' 現在你的項目需求會改變,每個包含三個或更多字符的字符串不再被定義爲字符串(我知道它的不尋常;)) 現在你可以輕鬆地改變你自己的方法。 – schlegel11
- 1. 檢查一個變量是否是一個CSV字符串中的值
- 2. 檢查字符串變量是否爲某個字符串值
- 3. Python:檢查一個變量是否是一個字典
- 4. 如何檢查一個對象是否是一個字符串?
- 5. 是否有一個ruby庫來檢查一個字符串是否是一個有效的單詞?
- 6. 檢查一個變量是一個unicode字符串的列表還是隻有一個unicode字符串
- 7. 檢查一個字符串是否是JavaScript中的html字體
- 8. 檢查一個值是否在一個字符串中
- 9. C - 檢查字符串是否是另一個字符串的子字符串
- 10. 檢查變量是否是VTL中的一個數字
- 11. 檢查輸入是否是一個循環中的字符串
- 12. 如何檢查一個ruby字符串是一個實際的字符串還是一個blob數據如image
- 13. 檢查一個字符串是一個字符串模式
- 14. 爪哇 - 檢查是否字符串在另一個字符串
- 15. Applescript:檢查一個字符串是否包含空字符串?
- 16. 檢查一個字符串是否包含一個int
- 17. 檢查一個nsstring是否與另一個字符串匹配
- 18. 檢查一個列表是否包含一個字符串
- 19. 檢查是否字符串彷彿是另一個Rails中
- 20. 如何使用Regex檢查字符串變量中是否存在一個字符串變量?
- 21. 檢查一個字符串是否是一個有效的數字:ArrayIndexOutOfBoundsException異常
- 22. 檢查一個字符串是否是迴文不是
- 23. 檢查一個字符串是否與另一個字符串相似
- 24. 如何檢查一個字符串是否包含一個子字符串 - mysql
- 25. 有效檢查一個字符串是否包含另一個字符串
- 26. 如何檢查一個字符串是否等於另一個字符串?
- 27. 檢查一個字符串是否包含另一個字符串
- 28. 如何檢查一個字符串是否是純字母?
- 29. 檢查C++中是否只有一個字符串變量不爲nullptr
- 30. 檢查一個字符串是否不包含一些文字
不知道問題的意圖,我認爲對於大多數現實世界的編程情況,「is_a?」實際上是更合適的用法(並且經常像安德魯格林提到的鴨式輸入檢查更好)。嚴格的類比較通常是一種代碼味道。 HTTP://en.wikipedia。org/wiki/Liskov_substitution_principle – mahemoff