是否有一種簡單的方法可以在Smalltalk中執行此操作?我80%確定有某種方法,但無法在任何地方找到它。檢查一個對象是一個給定類還是它的一個子類的實例
我知道,我可以使用
(instance class = SomeClass) ifTrue:
而且我知道,我可以使用superclass
等...但我希望有內置的:)
是否有一種簡單的方法可以在Smalltalk中執行此操作?我80%確定有某種方法,但無法在任何地方找到它。檢查一個對象是一個給定類還是它的一個子類的實例
我知道,我可以使用
(instance class = SomeClass) ifTrue:
而且我知道,我可以使用superclass
等...但我希望有內置的:)
要測試anObject是實例東西ACLASS的:
(anObject isMemberOf: aClass)
爲了測試是否它是ACLASS的實例或它的一個子類:
(anObject isKindOf: aClass)
你是對的,要檢查你使用(使用身份,而不是)確切類:
實例類== SomeClass的ifTrue:[]
有用也是isKindOf:
該測試是否實例是類或給定類的亞類:
(實例isKindOf:SomeClass的)ifTrue:[]
最好和最優雅的是寫在超類和同位體類的測試方法,然後用它像:
實例isSomeClass ifTrue:[]
最好和最優雅的是沒有問,告訴,例如: 而不是: 對象isSomething ifTrue:[做某事] 使用: 對象doSomething –
我同意伊戈爾。而且,「最好的和最優雅的」在旁觀者眼中。什麼是Integer和朋友做的肯定是*更快*因爲它們是單個消息發送,立即返回true/false而不是isKindOf:它必須循環類層次結構。一些人的缺點是你必須添加一個isSomeClass方法給Object,它返回false。 –