如何在smalltalk中创建2D数组

Ber*_*rko 4 smalltalk squeak

我已经按照这个previuos线程 如何在Smalltalk中管理2d数组? 但它没有帮助我请帮帮我.

我正在尝试创建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.
].
].
Run Code Online (Sandbox Code Playgroud)

错误是在抄本与未知选择器.我该怎么办才能解决这个问题?

Mar*_*inW 6

您的代码有几个问题:

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

MessageNotUnderstood:ThreadSafeTranscript >> show:at:at:

所以这意味着你应该设置一些括号来获得正确的消息到正确的对象.尝试:

Transcript show: ((testArr at:a) at:b).
Run Code Online (Sandbox Code Playgroud)

现在,您的阵列分配也存在问题.

在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).
Run Code Online (Sandbox Code Playgroud)

  • 给自己一个休息时间.这需要时间,蚱蜢;)但如果你花时间去"得到它",你会在黑桃中报答... (3认同)