2013-09-21 119 views
0

有沒有一種方法可以在smalltalk中確定一個已經初始化的變量的數據類型?Smalltalk - 有沒有一種方法來確定數據類型?

如:

|abc| 
abc := #(1 2 3 4 5 6) 'This is the array declared' 
(abc isKindOf: Array) ifTrue: [ 'Check the data type of abc against array datatype' 
    ^'Success!' 
] 

原因請求: 我需要實現,只有當它是由一個特定的數據類型稱爲一個方法。

+3

你可以擴展一下你的例子嗎?顯式類型檢查通常是設計問題的標誌。 – Tobias

+0

托比亞斯,感謝您的建議。這確實是一個設計問題。 我只需要在Array類中添加該方法。 –

回答

3

如果我正確理解你的問題,你可以使用

abc isMemberOf: Array 

abc class == Array 

此檢查abc是的Array類(即調用數據類型的東西)的實例。

而且也許

abc respondsTo: #message 

在檢查是否方法稱爲消息abc定義可以對您有用。

+0

這有助於識別變量的數據類型/類。 但我意識到,如果該方法被添加到數組類,那麼只有一個數組類的實例[將永遠是一個數組]將能夠調用它。 –

+0

@AdityaKappagantula no。你可以隨時使用'Array someMessage'從任何你想要的地方 – Uko

1

只需將該方法添加到數據類型Array。 即類Array。

然後只有一個數組的實例才能夠調用它。

2

Smalltalk還有一個常用的習語。定義返回false的方法isArrayObject;在類Array上定義isArray,返回true。像這樣,你可以發送#isArray到任何對象。但是,正如上面所說的那樣,這個習語強調了一個次優的設計。

相關問題