R和Javascript之间的具体区别是什么意味着在以下两个非常相似的示例中,我需要R版本中的附加行来“修复”第一个匿名函数的参数值? / p>
是不是因为R推迟了评估,直到它被迫(正如我认为Lisp那样),但Javascript会尽早评估?或者我在这里走错了路线?
test <- list()
for (i in 1:10) {
test[[i]] <- (function(index) {
index <- index # why does R need this line when Javascript doesn't
return (function() {
print (index)
})
})(i)
}
test[[5]]()
test[[10]]()
test = new Array()
for (var i=1; i<=10; i++) {
test[i] = (function(index) {
return function() {
alert(index)
}
})(i)
}
test[5]()
test[10]()
答案 0 :(得分:3)
R使用延迟评估。您不需要index <- index
您可以使用force(index)
换句话说,在实际使用该值之前,不会计算index
的值。因此,如果在传递参数和评估参数之间发生任何更改,则这些更改将反映在最终输出中。
force
强制评估对象。
当您使用index <- index
时,您正在创建具有相同名称的其他对象。