[英]Validating parameter as a class in Squeak Smalltalk
如何將參數驗證為類對象? 例如,如果我想將參數驗證為字符串,則可以編寫param1 isString
。 有像isClass
這樣的東西嗎?
正如其他人指出的那樣,當您試圖弄清楚這種事情時, isKindOf:
和isMemberOf:
是您的朋友,但是調用這些方法通常是一種代碼味道。 幾乎總有更好的方法可以做到這一點,我將分為兩類:
performNextStep
我對所有游戲對象都實現一個performNextStep
函數,然后將其留給每個對象都要弄清楚應該做什么。 isKindOf:
類,而是檢查其是否為respondsTo: aMethod
,如果存在則調用它。 這也意味着,已經獲取了有效方法但不在您期望的初始層次結構中的類仍可以傳遞—如果您使用的是Traits(在其中可能沒有單個類層次結構進行測試),則這是非常重要的。 您可以測試您的參數是否繼承自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'
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.