【问题标题】:How can I call a method in Squeak?如何在 Squeak 中调用方法?
【发布时间】:2016-02-23 23:18:11
【问题描述】:

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

为了测试我使用的初始化

a := Animal new.
Transcript show: a; cr.

但除此之外,我只是不知道该怎么办。我试过a getNamea.getName,等等。什么是正确的方法?

请帮忙!我什至不知道谷歌是什么。

【问题讨论】:

  • 为了帮助进行谷歌搜索,请记住 Squeak 是 Smalltalk 语言的环境。您正在处理对象,“方法”的 Smalltalk 术语是“消息”。

标签: methods call smalltalk squeak


【解决方案1】:

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

例如
Animal newnew 消息发送到 Class Animal
这是一个一元消息的例子。

Transcript show: ashow: 消息发送到 Class Transcript,参数为 a
这是关键字消息的示例。

Transcript cr 将消息 cr 发送到 Class Transcript
这是一元消息的另一个例子。

Transcript show: a ; cr .
这是消息级联的示例,其中一行中的多条消息被发送到同一个接收者。

消息级联中,您只需键入一次接收者的名称,使用; 分隔每条消息的其余部分。

Transcript show: a ; cr .

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

约定是简单访问器使用与它们访问的实例变量相同的名称; Class Object 的实例将具有 anObject 形式的变量名。

所以一个名为name 的实例变量将有一个名为name 的getter 和一个名为name: 的setter

按照惯例,我们会有:

anAnimal := Animal new.
Transcript show: anAnimal name ;
           cr .

在这里,我们将name 消息发送到anAnimal。它返回 anAnimal 的名称。作为一元消息,它的优先级高于关键字消息Transcript show: <something>,因此首先被评估。 anAnimal name 消息的返回值成为Transcript show: <something> 消息的参数。

你可以自己看看。在工作区中,突出显示anAnimal name,然后单击并选择“检查它”。这将打开一个 Inspector 窗口,它会显示anAnimal name 消息返回的对象。

这些答案或许能帮助你理解:
Explain a piece of Smalltalk code
Keyword messages in smalltalk

本文Beginning to Smalltalk: Hello World 使用Transcript show: 'Hello World' 对其进行了更详细的介绍。

【讨论】:

    【解决方案2】:

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

    【讨论】:

    • 实际上并非如此:冒号是show: 消息的一部分(= 方法名称)。它表示一条带有参数的消息(在您的情况下,是a getName 的结果)。看看这个introduction 以获得一些初学者帮助。
    • 是的,Transcript 一个对象。它接收show: 关键字。这个关键字接受一个参数。 (任何以 : 结尾的消息名称都是带有参数的名称)。 a getName 正在返回一个对象。它返回代表aname 的字符串。 Transcript show: 然后显示aname。同样,Smalltalk 中有非常 强的约定不是 将您的getter 称为“getName”,而是将其称为“name”。如果您希望其他人阅读并理解您的代码。如果你的讲师让你称你的 getter 为“getName”,他就是在引导你偏离 Smalltalk 的方式。
    • a getName 返回一个值。关键字消息传递参数。关键字消息的名称以 : 结尾
    • 我假设您正在做的是在工作区中输入“a getName”,然后从鼠标右键菜单或键盘快捷键中选择“执行”。当您“执行”时,将发送消息,但没有对返回值进行任何操作,因此您看不到任何事情发生。但是,如果您“打印它”(也在菜单中),则该值将在表达式之后立即打印;您无需将其发送到成绩单。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多