Methods 如何在Squeak中调用方法?
我正在调查Squeak Smalltalk。不知何故,我定义了一个初始化并打印初始值的对象(作业中有相关说明)。然后我必须定义一个方法(Methods 如何在Squeak中调用方法?,methods,call,smalltalk,squeak,Methods,Call,Smalltalk,Squeak,我正在调查Squeak Smalltalk。不知何故,我定义了一个初始化并打印初始值的对象(作业中有相关说明)。然后我必须定义一个方法(getName),我这样做了,但我不知道如何在工作区中调用该方法 为了测试初始化,我使用了 a := Animal new. Transcript show: a; cr. 但除此之外,我不知道该怎么办。我尝试了a getName和a.getName,等等。正确的方法是什么 求求你,救命!我甚至不知道用谷歌搜索什么。好的,我想我知道了。它确实是一个getNam
getName
),我这样做了,但我不知道如何在工作区中调用该方法
为了测试初始化,我使用了
a := Animal new.
Transcript show: a; cr.
但除此之外,我不知道该怎么办。我尝试了a getName
和a.getName
,等等。正确的方法是什么
求求你,救命!我甚至不知道用谷歌搜索什么。好的,我想我知道了。它确实是一个getName,但这样的行与返回值无关。所以我用了
Transcript show:a getName;cr.
成功了!转录本似乎也是一个对象,而:
是传递参数的方式。在Smalltalk中,您向接收者发送消息
e、 g.Animal new
将new
消息发送到ClassAnimal
这是一元信息的一个示例
Transcript show:a
将show:
消息发送到类Transcript
,参数为a
这是一个关键字消息的示例
Transcript cr
将消息cr
发送到ClassTranscript
这是一元信息的另一个例子
成绩单显示:a;
cr.
这是消息级联的一个示例,其中一行中的多个消息被发送到同一个接收器 在消息级联中,只需键入一次接收方的名称,使用
以分离每条消息的其余部分
成绩单显示:a;
cr.
在Smalltalk中,具有参数的关键字必须具有冒号后缀
约定是简单访问器使用与其访问的实例变量相同的名称;类对象
的实例将具有形式为anObject
的变量名
因此,名为name
的实例变量将有一个名为name
的getter和一个名为name:
setter
按照惯例,我们会:
anAnimal := Animal new.
Transcript show: anAnimal name ;
cr .
在这里,我们将name
消息发送到anAnimal
。它返回anAnimal的名称。作为一元消息,它的优先级高于关键字messageTranscript show:
,因此首先计算。animal name
消息的返回将成为Transcript show:
消息的参数
你可以亲自看看。在工作区中,突出显示动物名称,然后单击并选择“检查”。这将打开一个Inspector窗口,它将向您显示动物名称
消息返回的对象
这些答案可能有助于您理解:本文使用
转录本show:'Hello World'
进行了更详细的介绍,实际上,冒号是show:
消息(=方法名)的一部分。它表示接受参数的消息(在您的示例中,是getName的结果)。看看这个,有一些初学者的帮助。是的,Transcript
是一个对象。它接收show:
关键字。这个关键字接受一个参数。(任何以:结尾的消息名称都是带有参数的名称)<代码>一个getName正在返回一个对象。它返回一个字符串,表示a
的名称<代码>成绩单显示:
然后显示a
的名称
。同样,Smalltalk中有非常强大的约定,不将getter称为“getName”,而是将其称为“name”。如果您希望其他人阅读并理解您的代码。如果你的讲师让你称你的getter为“getName”,那么他就把你从Smalltalk的方式引入歧途。getName
返回一个值。关键字消息传递参数。关键字消息的名称以结尾:
我假设您正在工作区中键入“getName”,然后从鼠标右键菜单或键盘快捷键中选择“do it”。当您“执行”时,会发送消息,但不会对返回值执行任何操作,因此您不会看到任何事情发生。但是,如果“打印它”(也在菜单中),则值将在表达式之后立即打印;你不需要把它发送到成绩单上。为了帮助谷歌搜索,记住Squeak是Smalltalk语言的环境。您正在处理对象,“方法”的Smalltalk术语是“消息”。