用自身+字典值修改变量/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

这没有意义。