在Squeak Smalltalk中将参数作为类进行验证
如何将参数验证为类对象?例如,如果我想将参数验证为字符串,我可以编写在Squeak Smalltalk中将参数作为类进行验证,smalltalk,squeak,Smalltalk,Squeak,如何将参数验证为类对象?例如,如果我想将参数验证为字符串,我可以编写param1-isString。是否有类似于isClass的东西?您可以测试您的参数是否继承自类或元类: String isKindOf: Class orOf: Metaclass => true "If you don't want Metaclasses, simply use isKindOf: Class" String class isKindOf: Class orOf: Metaclass => tr
param1-isString
。是否有类似于isClass
的东西?您可以测试您的参数是否继承自类
或元类
:
String isKindOf: Class orOf: Metaclass => true
"If you don't want Metaclasses, simply use isKindOf: Class"
String class isKindOf: Class orOf: Metaclass => true
'foo' isKindOf: Class orOf: Metaclass => false
但是,最好是在类
(以及任何其他相关对象)本身上实现要执行的操作,这样您就可以只执行someOp
,而无需实际验证输入
如果您的输入是字符串,并且希望获得具有相应名称的类(如果存在),则可以使用:
Smalltalk classNamed: 'String'
您可以测试参数是否继承自
类
或元类
:
String isKindOf: Class orOf: Metaclass => true
"If you don't want Metaclasses, simply use isKindOf: Class"
String class isKindOf: Class orOf: Metaclass => true
'foo' isKindOf: Class orOf: Metaclass => false
但是,最好是在类
(以及任何其他相关对象)本身上实现要执行的操作,这样您就可以只执行someOp
,而无需实际验证输入
如果您的输入是字符串,并且希望获得具有相应名称的类(如果存在),则可以使用:
Smalltalk classNamed: 'String'
正如其他人所指出的,
isKindOf:
和isMemberOf:
是您在尝试解决此类问题时的朋友,但调用这些方法通常是一种代码气味。几乎总有更好的方法可以做到这一点,我将其分为两类:
performNext
函数,然后把它留给每个对象来决定它应该做什么是否属于类,不如检查它是否响应了:aMethod
,如果响应了,就调用它。这也意味着,如果您使用的是Traits,那么已经获得了有效方法但不在您预期的初始层次结构中的类仍然可以被传递,这一点非常重要,因为在Traits中可能没有一个类层次结构可供测试
正如其他人所指出的,
isKindOf:
和isMemberOf:
是您在尝试解决此类问题时的朋友,但调用这些方法通常是一种代码气味。几乎总有更好的方法可以做到这一点,我将其分为两类:
performNext
函数,然后把它留给每个对象来决定它应该做什么是否属于类,不如检查它是否响应了:aMethod
,如果响应了,就调用它。这也意味着,如果您使用的是Traits,那么已经获得了有效方法但不在您预期的初始层次结构中的类仍然可以被传递,这一点非常重要,因为在Traits中可能没有一个类层次结构可供测试
如果你想涉及类、元和特性的例子,你在SeeAK中也有信息的行为。
如果你想覆盖类、元和特性的情况,你在SeeAK中也有信息的行为。
你可以考虑接受一个答案或者指出什么是错的,你可以考虑接受答案或者指出丢失了什么。