有没有办法确定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!'
]
请求原因: 我只有在特定数据类型调用时才需要实现a方法。
答案 0 :(得分:3)
如果我理解你的问题,你可以使用
abc isMemberOf: Array
或
abc class == Array
这检查abc
是Array
类的实例(你称之为数据类型的东西)。
也许
abc respondsTo: #message
对您有用,因为它会检查是否为abc
定义了名为 message 的方法。
答案 1 :(得分:2)
Smalltalk也有一个常见的习语。在isArray
上定义返回false的方法Object
;在类isArray
上定义返回true的Array
。像这样,您可以将#isArray
发送到任何对象。
但同样,如上所述,这个成语突出了一个次优的设计。
答案 2 :(得分:1)
只需将方法添加到数据类型Array即可。 即类Array。
然后只有一个Array的实例才能调用它。