用自身+字典值修改变量/Pharo - Smalltalk
Modifing a variable with itself + dictionary values / Pharo - Smalltalk
当我 运行 下面的代码开始转录我初始化 puntaje 和 div (0.0 0.0) 的值时,循环不会改变它们。
字典 puntajePeliculas 和 contadorPuntajes 有我需要的数据我已经事先检查过
知道为什么它不更新循环中的值吗?
puntajeDelDirector: director
| auxiliarPelis puntaje aux div |
aux := data.
puntaje := 0.0.
div := 0.0.
auxiliarPelis := aux listaPeliculasPorDirector: director.
auxiliarPelis do: [:each | puntaje := puntaje + [puntajePeliculas at: each] ].
auxiliarPelis do: [:each | div := div + contadorPuntajes at: each].
Transcript show: div; cr.
Transcript show: puntaje; cr.
puntaje := puntaje / div.
Transcript show: puntaje; cr.
^puntaje.
要更新puntaje
更改
auxiliarPelis do: [:each | puntaje := puntaje + [puntajePeliculas at: each]].
和
auxiliarPelis do: [:each | puntaje := puntaje + (puntajePeliculas at: each)].
换句话说,在 puntajePeliculas at: each
周围使用圆括号而不是方括号。
要更新 div
,而不是
auxiliarPelis do: [:each | div := div + contadorPuntajes at: each].
写入
auxiliarPelis do: [:each | div := div + (contadorPuntajes at: each)].
解释:
在第一次迭代中,[puntajePeliculas at: each]
(带方括号)是块对象,而不是电影each
中的puntaje
。块在收到 #value
消息时得到评估。
第二种,二进制消息+
的优先级高于关键字消息at:
的优先级。因此编译器会将其解释为:
(div + contadorPuntajes) at: each
这没有意义。
当我 运行 下面的代码开始转录我初始化 puntaje 和 div (0.0 0.0) 的值时,循环不会改变它们。 字典 puntajePeliculas 和 contadorPuntajes 有我需要的数据我已经事先检查过
知道为什么它不更新循环中的值吗?
puntajeDelDirector: director
| auxiliarPelis puntaje aux div |
aux := data.
puntaje := 0.0.
div := 0.0.
auxiliarPelis := aux listaPeliculasPorDirector: director.
auxiliarPelis do: [:each | puntaje := puntaje + [puntajePeliculas at: each] ].
auxiliarPelis do: [:each | div := div + contadorPuntajes at: each].
Transcript show: div; cr.
Transcript show: puntaje; cr.
puntaje := puntaje / div.
Transcript show: puntaje; cr.
^puntaje.
要更新puntaje
更改
auxiliarPelis do: [:each | puntaje := puntaje + [puntajePeliculas at: each]].
和
auxiliarPelis do: [:each | puntaje := puntaje + (puntajePeliculas at: each)].
换句话说,在 puntajePeliculas at: each
周围使用圆括号而不是方括号。
要更新 div
,而不是
auxiliarPelis do: [:each | div := div + contadorPuntajes at: each].
写入
auxiliarPelis do: [:each | div := div + (contadorPuntajes at: each)].
解释:
在第一次迭代中,[puntajePeliculas at: each]
(带方括号)是块对象,而不是电影each
中的puntaje
。块在收到 #value
消息时得到评估。
第二种,二进制消息+
的优先级高于关键字消息at:
的优先级。因此编译器会将其解释为:
(div + contadorPuntajes) at: each
这没有意义。