Methods 如何在Squeak中调用方法?

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

我正在调查Squeak Smalltalk。不知何故,我定义了一个初始化并打印初始值的对象(作业中有相关说明)。然后我必须定义一个方法(
getName
),我这样做了,但我不知道如何在工作区中调用该方法

为了测试初始化,我使用了

a := Animal new.
Transcript show: a; cr.
但除此之外,我不知道该怎么办。我尝试了
a getName
a.getName
,等等。正确的方法是什么


求求你,救命!我甚至不知道用谷歌搜索什么。

好的,我想我知道了。它确实是一个getName,但这样的行与返回值无关。所以我用了
Transcript show:a getName;cr.
成功了!转录本似乎也是一个对象,而
是传递参数的方式。

在Smalltalk中,您向接收者发送消息

e、 g.
Animal new
new
消息发送到Class
Animal

这是一元信息的一个示例

Transcript show:a
show:
消息发送到类
Transcript
,参数为
a

这是一个关键字消息的示例

Transcript cr
将消息
cr
发送到Class
Transcript

这是一元信息的另一个例子

成绩单显示:a;
cr.

这是消息级联的一个示例,其中一行中的多个消息被发送到同一个接收器

在消息级联中,只需键入一次接收方的名称,使用
以分离每条消息的其余部分

成绩单显示:a;
cr.

在Smalltalk中,具有参数的关键字必须具有冒号后缀

约定是简单访问器使用与其访问的实例变量相同的名称;类
对象
的实例将具有形式为
anObject
的变量名

因此,名为
name
的实例变量将有一个名为
name
的getter和一个名为
name:
setter

按照惯例,我们会:

anAnimal := Animal new.
Transcript show: anAnimal name ;
           cr .
在这里,我们将
name
消息发送到
anAnimal
。它返回anAnimal的名称。作为一元消息,它的优先级高于关键字message
Transcript 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术语是“消息”。