gpt4 book ai didi

smalltalk - 在smalltalk的方法中调用self

转载 作者:行者123 更新时间:2023-12-03 08:03:14 24 4
gpt4 key购买 nike

我试图在 smalltalk 中做一个等差数列类,我在做一个 printOn 方法时遇到了一些麻烦。
这是我拥有的代码,由于某种原因,它会在到达 self 部分时失败,但我不明白为什么

printOn: aStream
|i retValue|
retValue := ''.
i := 0.
[i < myCount ] whileTrue: [retValue := retValue + ('', self valueOf: i). i := i -1.].
aStream nextPutAll: retValue

最佳答案

,是一个二进制消息。它的优先级高于 valueOf:关键字消息。您实际执行的内容如下所示:

('', self) valueOf: i

您需要加上括号来明确表示您想要 valueOf:首先执行:
'', (self valueOf: i)

其次:

你做 retValue + "probably string" .您确定要这样做吗 +在字符串中而不是 ,哪个是串联?

第三:

你从 0 开始递减 i每一步减 1。你确定你不会陷入无限循环吗?

第四

为什么需要 whileTrue: ?你不能做这样的事情:
1 to: myCount do: [ :i |
retValue := retValue + ('', (self valueOf: i - 1)) ]

另请注意,在 Smalltalk 中,您的第一个索引是 0,最后一个是 myCount - 1,这很奇怪。通常您从 1 开始,以集合的大小结束。

第五

我刚刚注意到您实际上是将一个空字符串与 self valueOf: i 连接起来。 .那没有任何意义。

如果您只需要在流上打印内容,请执行以下操作:
printOn: aStream
1 to: myCount do: [ :i |
aStream nextPutAll: (self valueOf: i) asString) ]

或者
printOn: aStream
(1 to: myCount)
do: [ :i | aStream nextPutAll: (self valueOf: i) asString) ]
separatedBy: [ aStream nextPutAll: ', ' ]

不知道是不是 valueOf:返回一个字符串,如果是,则无需发送 asString结果

关于smalltalk - 在smalltalk的方法中调用self,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36412842/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com