List Squeak Smalltalk getting“获得;AdaptonNumber:和Send:“发送”;创建链接列表时出错
我已经定义了列表结构,现在我正在尝试创建一个包含一些规则的列表。 以下是迄今为止的代码:List Squeak Smalltalk getting“获得;AdaptonNumber:和Send:“发送”;创建链接列表时出错,list,smalltalk,List,Smalltalk,我已经定义了列表结构,现在我正在尝试创建一个包含一些规则的列表。 以下是迄今为止的代码: 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 getNe
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].
我不知道怎么了
下面是我在List方法中声明和使用的其他方法的声明:
setValue: i
a := i.
getNext
^next
addLinkedValue: n
next := Test new setValue: n.
问题出在这一行:
[aNumber \\ current] whileFalse:
因为aNumber
是一个整数
,但current
不是。事实上,current
是Test
类的一个实例,因此当参数(current
在本例中)不是整数时,amber
不知道如何处理消息
接收者aNumber
试图解决此问题的方法是要求参数处理这种情况,并将参数通知adaptoInteger:aNumber and send:#quo:
请注意,选择器不是\\
,而是quo:
。原因在于\\
的实现方式,这使接收者在发送消息quo:
之前意识到参数不是一个整数
现在,假设您没有在Test
中实现adaptetointeger:andSend:
,那么从Object
继承的实现将进入场景,而Test
的实例将接收adaptetonnumber:andSend:
,这是更一般的
解决方案将包括在Test
as中实现此方法
adaptToNumber: aNumber andSend: aSymbol
^aNumber perform: aSymbol withArgument: a
它将消息委托给(数字)实例变量a
话虽如此,我还是建议您修改代码,使其更简单。还有一个问题有待解决:条件(ifTrue:)不能是一个代码块[…]-条件将无条件地进行计算,但您编写了[current getNext=nil]ifTrue:
所以,[aNumber\\current value=0]whileFalse:
如果在Test..。@aka.nice中定义了值,则可能会起作用。然而,我仍然认为该准则值得彻底修订。
adaptToNumber: aNumber andSend: aSymbol
^aNumber perform: aSymbol withArgument: a