如何在smalltalk中创建2D数组



我遵循了前面的线程如何管理二维数组在Smalltalk?但它没有帮助我,请帮助我。

我试图创建NXN数组,然后打印出来。例如2x2数组:我错过了什么?

|testArr|.
testArr := (Array new: 2)
at: 1 put: ((Array new: 2) at: 1 put: '0'; at: 2 put: 'X');
at: 2 put: ((Array new: 2) at: 1 put: 'P'; at: 2 put: 'Y').
1 to:2 do:[:a|
1 to:2 do:[:b|
Transcript show: testArr at:a at:b.
].
].

错误是在Transcript with unknown selector。

你的代码有几个问题:

首先是你描述的错误信息。我猜它的全称是:

MessageNotUnderstood: ThreadSafeTranscript>>显示:::

因此,这意味着您应该设置一些括号来将正确的消息传递给正确的对象。试一试:

Transcript show: ((testArr at:a) at:b).

现在数组赋值也有一个问题。

在Smalltalk/Pharo/Squeak中,如果您将at:put:发送到一个数组,它将返回您分配的对象,at:put:的第二个参数,而不是接收器。因此,在您的示例中,变量testArr不包含数组的数组,而是字符串'Y'。

如果你真的想使用;级联消息,你必须在级联结束时将yourself消息发送到数组。

:

testArr := (Array new: 2).
testArr at: 1 put: ((Array new: 2) at: 1 put: '0'; at: 2 put: 'X'; yourself).
testArr at: 2 put: ((Array new: 2) at: 1 put: 'P'; at: 2 put: 'Y'; yourself).

最新更新