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

smalltalk中的关键词消息(初学者)(Pharo),smalltalk,pharo,squeak,visualworks,amber-smalltalk,Smalltalk,Pharo,Squeak,Visualworks,Amber Smalltalk,我试图创建一个关键字消息样式的方法,但是我不知道如何从方法内部访问接收方。我相信这很简单,但是我在任何地方都找不到答案。我试图实现的是多余的,但我仍然想知道它是如何工作的 subst: i1 by: i2 ^ self copyReplaceAll: i1 with: i2. 它将在工作区中调用,如下所示: string1 := 'Lemon'. string2 := 'm'. string3 := 'ss'. string1 subst: string2 by: string3.

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

subst: i1 by: i2
      ^ self copyReplaceAll: i1 with: i2.
它将在工作区中调用,如下所示:

string1 := 'Lemon'.
string2 := 'm'.
string3 := 'ss'.
string1 subst: string2 by: string3.
错误消息:“MessageNotUnderstanding:ByteString>>subst:by:”

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


提前谢谢

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

请阅读(或至少浏览)一篇教程,了解基本知识。


“MessageNotUnderstanding:ByteString>>subst:by:”

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

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

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

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

因此,每条消息都有一个接收者和一个消息名

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

另一方面,所有方法都是对象的一部分。它们以类方法或实例方法的形式存储在对象的类定义中

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

下面是一个关键字消息示例:
成绩单节目:“你好,世界!”

它的意思是“将消息
发送给接收者
抄本
”,显示:“你好,世界!”
。(Transcript是一个显示系统输出的窗口。所有图形Smalltalk环境都有一个Transcript类)

此消息包含三个部分:

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

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

参数是“Hello World”

(对
成绩单节目更全面的解释:“你好,世界!”

可在 [

包含多个关键字的关键字消息示例:

aByteString copyReplaceAll:i1与:i2

接收器是
aByteString
,是类
ByteString

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

参数是
i1
i2

如果
ByteString
类(或类层次结构中它上面的任何类,如
String
)包含该方法,则消息位于对象的协议中

string1:='Lemon'。
string1 copyReplaceAll:i1与:i2

如果需要,可以将代码作为附加方法添加到
String
ByteString

subst:i1 by:i2

“用字符串i2替换子字符串i1的所有实例。
返回接收器“


^自复制替换所有:i1和:i2

然后可以在工作区中调用它,如下所示:

string1 := 'Lemon'.
string2 := 'm'.
string3 := 'ss'.
string1 subst: string2 by: string3.
string1:='Lemon'。
string2:=“m”。
字符串3:=“ss”。
string1 subst:string2 by:string3

但是
string1 subst:string2 by:string3

string1 copyReplaceAll:string2与:string3

另一个需要注意的风格点是,关键字消息中的每个关键字都应该尽可能具有描述性和明确性。
subst
可能意味着
substitute
substring

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


重新键入它,然后接受它(在我的系统上,通过右键单击2或3键鼠标,或“Ctrl-s”键盘快捷键。尽管不同平台上的鼠标和键映射可能不同)。

我最初尝试的是“self”,但不起作用(对不起,我应该在问题中指定它)。除非我遗漏了其他错误。@Uritomi请量化“不起作用”。请在您的问题中提供完整的错误消息,以及生成错误消息的代码。以上代码是我所做的全部,错误消息是:“MessageNotUnderstanding:ByteString>>subst:by:”啊,好吧,这就清楚了很多。似乎我还有很长的路要走,smalltalk仍然哈哈,谢谢你的回答!@Uritomi,正如我所说,你需要完成一个教程。投票并接受答案也是表达你的感激之情的习惯。