gpt4 book ai didi

list - Squeak Smalltalk 创建链接列表时出现 "adaptToNumber:andSend:"错误

转载 作者:行者123 更新时间:2023-12-03 06:56:53 26 4
gpt4 key购买 nike

我已经定义了列表结构,现在我正在尝试创建一个包含一些规则的列表。这是到目前为止的代码:

List: aa 
| i start current aNumber|
start := Test new setValue:2.
current := start.
aNumber:=3.
i:=0.
[i<=aa] whileTrue:[
current:=start.
[aNumber \\ current =0] whileFalse:
[[current getNext = nil] ifTrue:[current addLinkedVlue:aNumber. i=i+1].current:=current getNext].
aNumber:=aNumber+1].

我有方法 printListFrom 获取参数 aa。目的是获得一个长度为 aa 的列表。列表中不能包含可以在没有提醒的情况下被列表中已有的数字整除的数字。例如,如果列表包含数字:2 3 5,我们需要检查6,那么6/2 = 3,它没有提醒,所以我们不能将其添加到列表中。如果我们要检查7,那么7/2=3个提醒1,7/3=2个提醒1,7/5=1个提醒2,这样我们就可以将7添加到列表中。

如果我们有aa = 3,那么我必须得到包含3个数字(2 3 5)的列表,如果aa = 4,那么列表应该是(2 3 5 7)等等。

在我的代码中,在 whileTrue 循环中,我将 aNumber 除以列表(当前)中的数字,如果我得到提醒为 0,我只需将 1 添加到 aNumber,如果提醒大于 0,则将 aNumber 除以中的下一个数字列表,如果我将 aNumber 除以列表中的所有数字,并在每次除法后得到一些提醒,我将 1 添加到 i 中,它代表列表的长度,并且我还将 aNumber 添加到列表中。

代码运行不好,我得到:

MessageNotUnderstood: adaptToNumber:andSend:

我不知道出了什么问题。

这是我在 List 方法中声明和使用的其他方法的声明:

setValue: i 
a := i.

getNext
^next


addLinkedValue: n
next := Test new setValue: n.

最佳答案

问题出在这一行:

[aNumber \\ current] whileFalse:

因为aNumberInteger但是current不是。事实上currentTest 的一个实例类,因此 aNumber不知道如何处理消息\\当参数(本例中为 current )不是 Integer 时.

接收器是什么aNumber尝试解决这个问题的方法是要求参数应对这种情况,这样做会通知参数 adaptToInteger: aNumber andSend: #quo: .

请注意,选择器不是 \\但是quo: 。原因是碍事\\已实现,这使得接收者意识到参数不是 Integer在向其发送消息 quo: 之前.

现在,鉴于您尚未实现 adaptToInteger:andSend:Test继承自 Object 的实现进入场景和Test的实例收到adaptToNumber:andSend: ,这是更一般的。

解决方案包括在 Test 中实现此方法。作为

adaptToNumber: aNumber andSend: aSymbol
^aNumber perform: aSymbol withArgument: a

将消息委托(delegate)给(数字)实例变量 a .

话虽如此,我建议您也修改代码以使其更简单。

关于list - Squeak Smalltalk 创建链接列表时出现 "adaptToNumber:andSend:"错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34485689/

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