簡體   English   中英

在Squeak Smalltalk中將參數驗證為類

[英]Validating parameter as a class in Squeak Smalltalk

如何將參數驗證為類對象? 例如,如果我想將參數驗證為字符串,則可以編寫param1 isString 有像isClass這樣的東西嗎?

正如其他人指出的那樣,當您試圖弄清楚這種事情時, isKindOf:isMemberOf:是您的朋友,但是調用這些方法通常是一種代碼味道。 幾乎總有更好的方法可以做到這一點,我將分為兩類:

  1. 在所有相關的類上實現該方法,並對每個類執行正確的操作。 例如,如果我正在編寫一個視頻游戲,那么,與其測試我要得到的對象並告訴下一步該做什么, performNextStep我對所有游戲對象都實現一個performNextStep函數,然后將其留給每個對象都要弄清楚應該做什么。
  2. 測試功能,而不是類成員資格。 而不是檢查某物是否為isKindOf:類,而是檢查其是否為respondsTo: aMethod ,如果存在則調用它。 這也意味着,已經獲取了有效方法但不在您期望的初始層次結構中的類仍可以傳遞—如果您使用的是Traits(在其中可能沒有單個類層次結構進行測試),則這是非常重要的。

您可以測試您的參數是否繼承自ClassMetaclass

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM