要知道類some_class
是某個對象的本徵類的最好方法是什麼?知道某個類是否是本徵類
3
A
回答
4
(現有紅寶石2.0)如果只有下面的表達式的計算結果爲true
如果對象x
是eigenclass:
Class === x && x.ancestors.first != x
的===
相等性檢查斷言x
是Class
類的實例,!=
不等式檢查使用的事實是ancestors
intros pection方法「跳過」特徵類。 對於作爲Object
類的實例的對象x
(即,x
不是空白石板對象),Class === x
檢查等同於x.is_a? Class
或在這種特定情況下等於x.instance_of? Class
。
從Ruby 2.0開始,上述表達式不足以檢測本徵類,因爲它也對具有prepend
ed模塊的類求值爲true
。這可以通過x.ancestors.first
不是這樣的前置模塊的附加檢查來解決,例如,通過Class === x.ancestors.first
。另一個解決方案是如下修改整個表達式:
Class === x && !x.ancestors.include?(x)
3
總是有蠻力:
ObjectSpace.each_object.any? {|o| some_class.equal? (class << o; self; end)}
2
在2.1.0至少,還有Module.singleton_class?
:
Module.singleton_class?
#=> false
Module.new.singleton_class?
#=> false
Class.singleton_class?
#=> false
Class.new.singleton_class?
#=> false
Class.singleton_class
#=> #<Class:Class>
Class.singleton_class.singleton_class?
#=> true
相關問題
- 1. 如何知道某個類是否擴展了JWindow類?
- 2. 如何知道某個類是否可以用作靜態類?
- 3. 如何知道某個類是否映射爲Hibernate實體?
- 4. 如何知道某個類是否有析構函數
- 5. 在Java中,是否有可能知道某個類是否已被加載?
- 6. 如何知道某個類是否符合某個特定的KVO?
- 7. 是否有可能知道屬於某個類或其父類的屬性
- 8. 如何知道某個類是來自JRE還是外部Jar?
- 9. 如何知道一個dom元素是否是某種類型的標籤
- 10. 類實例是否可以知道它是否是一個參數?
- 11. 如何知道某個特定函數的Java類是否存在?
- 12. 我如何知道某個類型是否附有字符串轉換器?
- 13. 如何知道JVM是否可以訪問某個特定的類?
- 14. Scala:如何知道某個類是否枚舉; isInstanceOf [枚舉]不起作用
- 15. 何時知道某個函數是否是回調函數?
- 16. 我們如何知道類型類是否是另一個類型類的子類?
- 17. 如何知道一個類的最低基地是某種類型
- 18. CLIPS:如何測試變量的類型是否是某個類?
- 19. C#對象是否知道更具體的類的類型?
- 20. 如何知道類型是否繼承了其他類型?
- 21. 知道類屬性中是否使用類屬性
- 22. Scala TypeTags或Manifest:是否可以確定某個類型是否是Value類?
- 23. 是否可以確定某個類型是否是範圍枚舉類型?
- 24. AS3 - 我可以知道一個類是否實現了一個接口(或者是另一個類的子類)?
- 25. 是否有可能知道一個類是否被擴展方法擴展?
- 26. 如何知道類型參數是否是動態的?
- 27. 知道一個數組是否包含元素類型
- 28. 知道是否添加了一個類(已添加javascript)
- 29. MSVC - 我如何知道一個類型是否必須移動?
- 30. 你怎麼知道一個NSObject是否有某個屬性?
我能找到'方法eigenclass'定義。它定義了什麼模塊? – sawa
@sawa對不起,我已經在我的irb會話中定義了它。 –
'some_class == some_class.ancestors.first'或'some_class.ancestors.first == Class'是否也適用? – sawa