Smalltalk - 有没有办法确定数据类型?

时间:2013-09-21 03:44:01

标签: 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!'
]

请求原因: 我只有在特定数据类型调用时才需要实现a方法。

3 个答案:

答案 0 :(得分:3)

如果我理解你的问题,你可以使用

abc isMemberOf: Array

abc class == Array

这检查abcArray类的实例(你称之为数据类型的东西)。

也许

abc respondsTo: #message

对您有用,因为它会检查是否为abc定义了名为 message 的方法。

答案 1 :(得分:2)

Smalltalk也有一个常见的习语。在isArray上定义返回false的方法Object;在类isArray上定义返回true的Array。像这样,您可以将#isArray发送到任何对象。 但同样,如上所述,这个成语突出了一个次优的设计。

答案 2 :(得分:1)

只需将方法添加到数据类型Array即可。 即类Array。

然后只有一个Array的实例才能调用它。