smalltalk中的关键字消息(初学者)(Pharo)



我正在尝试创建一个关键字消息样式的方法,但我不知道如何从该方法内部访问Receiver。我相信这很简单,但是我在任何地方都找不到答案。我试图实现的是多余的,但我仍然想知道它是如何工作的。

subst: i1 by: i2
      ^ self copyReplaceAll: i1 with: i2.

它将在工作区中调用如下:

string1 := 'Lemon'.
string2 := 'm'.
string3 := 'ss'.
string1 subst: string2 by: string3.

错误消息:"MessageNotUndertood:ByteString>>子字符串:由:"

该方法所要做的就是用"ss"替换"Lemon"中每次出现的"m",以创建"Lesson"(copyReplaceAll已经这样做了)。我不知道如何将string1放入该方法中。任何帮助都将不胜感激,

提前感谢!

self是当前对象(即接收器)。

请阅读(或至少略读)教程以获得基本知识


"MessageNotUnderstood: ByteString>>subst:by:"

此错误表示您尚未在ByteString上定义消息。要么你没有在任何地方真正定义它,要么你在错误的类上定义了它。

在Smalltalk中,方法不是独立的东西。

方法是对象响应消息发送的方式。

如果接收消息的东西知道如何响应消息,那么它就有一个响应消息的方法消息名称据说在对象的消息协议中。

因此,每个消息都有一个接收器和一个消息名称

关键字消息也将有一个或多个参数,每个参数有一个关键字

另一方面,所有方法都是对象的一部分。它们存储在对象的Class定义中,作为Classmethod实例方法

(唯一的例外是称为的匿名对象的特定情况。在这些情况下,方法是在的块定义中定义的)。

以下是一个示例关键字消息:Transcript show: 'Hello World!'

意思是"向接收方Transcript发送消息show: 'Hello World!'"。(Transcript是一个显示系统输出的窗口。所有图形Smalltalk环境都有一个Transcript类)。

消息包含三个部分:

最左边的部分总是接收器。在本例中,接收器Transcript

消息名称为show:,其中只有一个关键字show:

自变量为'Hello World'

(对Transcript show: 'Hello World!'
的更全面的解释可以在[http://beginningtosmalltalk.blogspot.com/2015/11/hello-world.html]

具有多个关键字的示例关键字消息:

aByteString copyReplaceAll: i1 with: i2

接收器是aByteString,是类别ByteString 的实例

消息名称为copyReplaceAll:with:。它有两个关键字,copyReplaceAll:with:

自变量为i1i2

如果ByteStringClass(或Class层次结构中它上面的任何Class,如String)包含该方法,则消息在对象的协议中。

string1 := 'Lemon' . string1 copyReplaceAll: i1 with: i2

如果需要,可以将代码添加到StringByteString中作为附加方法。

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可以表示substitutesubstring

向类中添加方法的最简单方法是使用系统浏览器。单击系统浏览器中的类,一个形式方法定义将出现在编辑窗格中。

重写它和Accept it(在我的系统上,通过右键单击2或3按钮鼠标,或"Ctrl-s"键盘快捷键。尽管鼠标和键的映射在不同的平台上可能有所不同)。

相关内容

  • 没有找到相关文章

最新更新