有人可以解释为什么这不符合我的预期吗?
add: rhsKey
myUnits includesKey: rhsKey
ifTrue: myUnits put: (myUnits at: rhsKey) + 1 at: rhsKey
ifFalse: myUnits add: rhsKey -> 1.
Run Code Online (Sandbox Code Playgroud)
执行示例:
ut:= UnitTracker命名:'test'.
添加:'秒'.
添加:'秒'.
添加:'秒'.
添加:'分钟'.
它在第一轮中继续通过ifTrue执行.
ifTrue:ifFalse:接受块[ ]作为参数.如果你没有封装你想在一个块中运行true和false的代码,它将在调用之前执行ifTrue:ifFalse:.
您还需要myUnits includesKey: rhsKey括在括号中( ),否则编译器会对您实际尝试发送的消息感到困惑.
事实上,我很惊讶你没有得到该代码的DoesNotUnderstand异常,因为你已经有效地发送includesKey:ifTrue:put:at:ifFalse:add:到了myUnits.
如您所希望的那样添加括号,它将如下所示:
add: rhsKey
(myUnits includesKey: rhsKey)
ifTrue: [ myUnits put: (myUnits at: rhsKey) + 1 at: rhsKey ]
ifFalse: [ myUnits add: rhsKey -> 1. ]
Run Code Online (Sandbox Code Playgroud)
所以现在ifTrue:ifFalse:正被送到结果myUnits includesKey: rhsKey
| 归档时间: |
|
| 查看次数: |
461 次 |
| 最近记录: |