如何在 smalltalk 中创建二维数组

How to Create 2D arrays in smalltalk

我已经关注了这个之前的话题 How to manage 2d array in 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.
].
].

错误在于带有未知选择器的抄本。我该怎么做才能解决它?

您的代码存在几个问题:

首先是您描述的错误信息。我想它的全长是:

MessageNotUnderstood: ThreadSafeTranscript>>show:at:at:

所以这意味着您应该设置一些括号以将正确的消息发送到正确的对象。尝试:

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

现在你的数组赋值也有问题。

在Smalltalk/Pharo/Squeak中,如果你发送at:put:到一个数组,它returns你分配的对象,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).