#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. Может быть, это из-за отложенной оценки.