>

이 코드를 아래에서 실행하면 puntaje와 div (0.0 0.0)를 초기화 한 값이 Transcript에 표시되어 루프가 변경되지 않습니다. 사전 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.


  • 답변 # 1

    puntaje 를 업데이트하려면  변경

    auxiliarPelis do: [:each | puntaje := puntaje + [puntajePeliculas at: each]].
    
    

    with

    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]  (대괄호 포함)는 puntaje 가 아닌 블록 객체입니다.  영화 each 의 . 그들이 #value 를받을 때 블록 평가  메시지.

    두 번째로 + 의 우선 순위  이진 메시지이며 at: 의 우선 순위보다 높습니다. 키워드 메시지입니다. 따라서 컴파일러는이를 다음과 같이 해석합니다.

    (div + contadorPuntajes) at: each
    
    

    이해되지 않습니다.

관련 자료

  • 이전 c# - 전원 보고서 포함에 대한 무단 오류 401
  • 다음 Iterate through an object - 객체를 통해 반복-Android Java