Странное поведение закрытия при печати

#r #closures

#r #закрытия

Вопрос:

В следующем R-коде, если я закомментирую print(i) строку, результат будет

 3
3
3
  

Но с print результатом

 1
2
3
  

Я не могу понять, почему? Как печать влияет на результат? Спасибо!

 f <- vector('list',3)
# set the i'th function to return i
for(i in 1:length(f)) {
  f[[i]] <- (function(i){
    # STRANGE HERE!
    print(i)
    function(){i}
  })(i)
}
# apply the functions using a different loop variable
for(j in 1:length(f)) {
  print(f[[j]]())
}

  

Комментарии:

1. Не могли бы вы объяснить, что вы подразумеваете под странным? То, что может показаться вам странным, может быть нормальным для другого пользователя.

2. Я имею в виду, что последняя строка print(f[[j]]()) печатается по-разному с / без print(i) строки. С ним я получаю 1 2 3 , без него я получаю 3 3 3

3. Может быть, это из-за отложенной оценки.