如何在smalltalk中创建2D数组

时间:2015-05-15 06:47:19

标签: smalltalk squeak

我已经按照这个previuos线程 How to manage 2d array in Smalltalk? 但它没有帮助我,请帮助我。

我正在尝试创建NXN阵列,然后将其打印出来。 对于exxple 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.
].
].

错误是抄本与未知选择器。我该怎么做才能解决它?

1 个答案:

答案 0 :(得分:6)

您的代码存在以下问题:

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

  

MessageNotUnderstood:ThreadSafeTranscript>> show:at:at:

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

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).