2012-12-08 45 views

回答

17

要測試anObject是實例東西ACLASS的:

(anObject isMemberOf: aClass) 

爲了測試是否它是ACLASS的實例或它的一個子類:

(anObject isKindOf: aClass) 
5

你是對的,要檢查你使用(使用身份,而不是)確切類:

實例類== SomeClass的ifTrue:[]

有用也是isKindOf:該測試是否實例是類或給定類的亞類:

(實例isKindOf:SomeClass的)ifTrue:[]

最好和最優雅的是寫在超類和同位體類的測試方法,然後用它像:

實例isSomeClass ifTrue:[]

+1

最好和最優雅的是沒有問,告訴,例如: 而不是: 對象isSomething ifTrue:[做某事] 使用: 對象doSomething –

+2

我同意伊戈爾。而且,「最好的和最優雅的」在旁觀者眼中。什麼是Integer和朋友做的肯定是*更快*因爲它們是單個消息發送,立即返回true/false而不是isKindOf:它必須循環類層次結構。一些人的缺點是你必須添加一個isSomeClass方法給Object,它返回false。 –

相關問題