我已经按照这个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)
错误是在抄本与未知选择器.我该怎么办才能解决这个问题?
您的代码有几个问题:
首先是您描述的错误消息.我想全长说:
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)