[英]Keyword messages in smalltalk (Beginner)(Pharo)
我正在嘗試創建一個關鍵字消息樣式方法,但我無法弄清楚如何從方法內部訪問Receiver。 我確信這很簡單,但我無法在任何地方找到答案。 我想要實現的是多余的,但我仍然想知道它是如何工作的。
subst: i1 by: i2
^ self copyReplaceAll: i1 with: i2.
它將在工作區中調用如下:
string1 := 'Lemon'.
string2 := 'm'.
string3 := 'ss'.
string1 subst: string2 by: string3.
錯誤消息:“MessageNotUnderstood:ByteString >> subst:by:”
所有方法應該做的是用“ss”替換“Lemon”中每個“m”的出現來創建“Lesson”(copyReplaceAll已經做過)。 我無法弄清楚如何將string1放入方法中。 任何幫助將不勝感激,
提前致謝!
self
是當前對象(即接收者)。
請閱讀(或至少略讀)一個教程以獲得基礎知識。
"MessageNotUnderstood: ByteString>>subst:by:"
此錯誤意味着您尚未在ByteString上定義消息。 您可能無法在任何地方實際定義它,或者您已在錯誤的類上定義它。
在Smalltalk中, 方法不是獨立的東西。
方法是對象響應消息發送的方式 。
如果接收消息的事情知道如何響應該消息,它具有響應消息的方法 。 消息名稱被稱為對象的消息協議 。
所以 - 每條消息都有一個接收者和一個消息名稱 。
關鍵字消息還將具有一個或多個參數 ,每個參數都有一個關鍵字 。
另一方面, 所有方法都是對象的一部分 。 它們作為Class方法或實例方法存儲在對象的Class定義中 。
(唯一的例外是在稱為塊的匿名對象的特定情況下。在這些情況下,該方法在塊定義中定義 )。
這是一個示例關鍵字消息: Transcript show: 'Hello World!'
這意味着“發送消息show: 'Hello World!'
到收件人Transcript
“。 (Transcript是一個顯示系統輸出的窗口。所有圖形Smalltalk環境都有一個Transcript類)。
此消息包含三個部分:
最左邊的部分始終是接收器 。 在此示例中, 接收器是Transcript
。
消息名稱為show:
其中包含一個關鍵字show:
爭論的焦點是'Hello World'
(對Transcript show: 'Hello World!'
更全面的解釋Transcript show: 'Hello World!'
可以在[ http://beginningtosmalltalk.blogspot.com/2015/11/hello-world.html]找到
包含多個關鍵字的示例關鍵字消息:
aByteString copyReplaceAll: i1 with: i2
接收器是aByteString
,Class ByteString
一個實例
消息名稱為copyReplaceAll:with:
它有兩個關鍵字copyReplaceAll:
和with:
。
參數是i1
和i2
。
如果ByteString
類(或類層次結構中的任何類,如String
)包含該方法,則消息在對象的協議中。
string1 := 'Lemon' . string1 copyReplaceAll: i1 with: i2
如果需要,可以將代碼添加到String
或ByteString
作為附加方法。
subst: i1 by: i2
"Substitute all instances of substring i1 with string i2. Return the receiver"
^ self copyReplaceAll: i1 with: i2
然后可以在工作區中調用它,如下所示:
string1 := 'Lemon'. string2 := 'm'. string3 := 'ss'. string1 subst: string2 by: string3
但是string1 subst: string2 by: string3
它沒有太大區別
string1 copyReplaceAll: string2 with: string3
另一個要注意的風格要點是關鍵字消息中的每個關鍵字應盡可能具有描述性和明確性。 subst
可能意味着substitute
或substring
向Class添加方法的最簡單方法是使用系統瀏覽器。 單擊系統瀏覽器中的類,並在編輯窗格中顯示形式方法定義。
改寫它,並Accept it
(在我的系統上通過右鍵單擊2或3鍵鼠標,或'Ctrl-s'鍵盤快捷鍵。雖然鼠標和鍵映射可能在不同的平台上有所不同)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.