簡體   English   中英

Smalltalk實例變量名稱和方法中允許使用哪些特殊字符?

[英]What special Characters are allowed in Smalltalk Instance Variable Names and Methods?

我記得在某個地方看到的方法實際上只允許字母“大寫”,“小寫”,數字和名稱中的下划線,但我無法再找到它。

是否允許任何其他角色?

如果要檢查選擇器名稱中允許哪些字符,可以使用RefactoringBrowser掃描程序並評估:

RBScanner isSelector: 'invalid@Selector'.
RBScanner isSelector: 'ValidSelector123_test'.
RBScanner isSelector: '111selector123_test'.

這同樣適用於實例變量名稱

RBCondition checkInstanceVariableName: 'validInstVar' in: UndefinedObject.
" true, valid instance variable name "
RBCondition checkInstanceVariableName: 'super' in: UndefinedObject.
" false, super is a reserved word in Smalltalk "
RBCondition checkInstanceVariableName: '' in: UndefinedObject.
" false, empty instance variables are not allowed "
RBCondition checkInstanceVariableName: 'Invalid' in: UndefinedObject.
" false, instance variable must start with lowercase character "

或類變量

RBCondition checkClassVarName: 'invalidClassVar' in: UndefinedObject.
" false, because class variables must start with uppercase "
RBCondition checkClassVarName: 'super' in: UndefinedObject.
" false, the same "
RBCondition checkClassVarName: '' in: UndefinedObject.
" false, empty Class variables are not allowed "
RBCondition checkClassVarName: 'Valid' in: UndefinedObject.
" true, a valid class variable "

雖然OP最有可能意味着“常規可解析語法中允許的內容”,但我認為指出“Smalltalk Textual Language”只是一個到達對象模型的中間文本表示是有益的。 如果您願意發揮創造力,那么您實際上可以做的事情是,解析簡單性的目標語法難以支持。

例如,您可以使用以數字開頭的方法:

Object methodDictionary at: #1a put: (Object >> #yourself) copy.
Object new perform: #1a

當你可以直接使用數字時,為什么字符串以數字開頭?

Object methodDictionary at: 42 put: (Object >> #yourself) copy.
Object new perform: 42

或者只是空字符串怎么樣?

Object methodDictionary at: #'' put: (Object >> #yourself) copy.
Object new perform: #''

您的瀏覽器可能會或可能不會優雅地處理添加到系統中的這些方法。

可以使用實例變量進行類似的操作。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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