Smalltalk—是否有方法确定数据类型?

Smalltalk—是否有方法确定数据类型?,smalltalk,Smalltalk,有没有办法确定smalltalk中已初始化变量的数据类型 例如: 请求理由: 只有在由特定数据类型调用的情况下,我才需要实现a方法。如果我正确理解您的问题,您可以使用 abc isMemberOf: Array 或 这将检查abc是否是Array类(您称之为数据类型)的实例 也可能 abc respondsTo: #message 这对您很有用,因为它检查是否为abc定义了名为message的方法。如果我正确理解了您的问题,您可以使用 abc isMemberOf: Array 或 这将检

有没有办法确定smalltalk中已初始化变量的数据类型

例如:

请求理由:
只有在由特定数据类型调用的情况下,我才需要实现a方法。

如果我正确理解您的问题,您可以使用

abc isMemberOf: Array

这将检查
abc
是否是
Array
类(您称之为数据类型)的实例

也可能

abc respondsTo: #message

这对您很有用,因为它检查是否为
abc

定义了名为message的方法。如果我正确理解了您的问题,您可以使用

abc isMemberOf: Array

这将检查
abc
是否是
Array
类(您称之为数据类型)的实例

也可能

abc respondsTo: #message

这对您很有用,因为它检查是否为
abc

定义了名为message的方法,只需将该方法添加到数据类型数组中即可。 i、 e到类数组


然后,只有数组的实例才能调用它。

只需将该方法添加到数据类型数组中即可。 i、 e到类数组


那么只有数组的一个实例才能调用它。

Smalltalk中还有一个常见的习惯用法。在
Object
上定义返回false的方法
isArray
;在返回true的类
数组
上定义
isArray
。这样,您就可以向任何对象发送
#isArray

但是,如上所述,这个习惯用法强调了一个次优的设计。

在Smalltalk中也有一个常见的习惯用法。在
Object
上定义返回false的方法
isArray
;在返回true的类
数组
上定义
isArray
。这样,您就可以向任何对象发送
#isArray

但是,正如上面所说,这个习惯用法强调了一个次优的设计。

您能稍微扩展一下您的示例吗?显式类型检查通常是设计问题的标志。Tobias,谢谢你的建议。这确实是一个设计问题。我只需要在Array类中添加该方法。您能稍微扩展一下示例吗?显式类型检查通常是设计问题的标志。Tobias,谢谢你的建议。这确实是一个设计问题。我只需要在Array类中添加方法,这有助于识别变量的数据类型/类。但是我意识到,如果将该方法添加到array类中,那么只有array类的一个实例[总是一个数组]才能调用它。@AdityaKappagantula否。您可以在任何地方使用
array someMessage
,这有助于识别变量的数据类型/类。但是我意识到,如果将该方法添加到array类中,那么只有array类的一个实例[始终是一个数组]才能调用它。@AdityaKappagantula否。您可以随时从任何地方使用
array someMessage