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,正如我所说,你需要完成一个教程。投票并接受答案也是表达你的感激之情的习惯。