如何将参数验证为类对象?例如,如果我想将aparameter验证为字符串,我可以编写param1 isString
。是否有类似isClass
的内容?
答案 0 :(得分:3)
正如其他人所指出的那样,isKindOf:
和isMemberOf:
是你的朋友,当你试图弄清楚这种事情时,但调用这些方法通常是 a有点代码味道。几乎总有更好的方法可以做到这一点,我将分为两类:
performNextStep
函数,然后将它留给每个对象来弄清楚它应该做什么。isKindOf:
是否为某个类,而是检查它是否为respondsTo: aMethod
,如果是,则调用它。这也意味着已经获得有效方法但不在您预期的初始层次结构中的类仍然可以传递 - 如果您正在使用Traits,那么可能没有单个类层次结构可以测试答案 1 :(得分:2)
您可以测试参数是继承自Class
还是Metaclass
:
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
但是,最好在Class
(以及任何其他相关对象)本身上实现您要执行的操作,这样您就可以在不实际验证输入的情况下执行someOp
。
如果您的输入是字符串,并且您希望获得具有相应名称的类(如果存在),则可以使用:
Smalltalk classNamed: 'String'