3

R 和 Javascript 之间的具体区别是什么,这意味着在以下两个非常相似的示例中,我需要 R 版本中的附加行来“修复”第一个匿名函数的参数值?

是因为 R 推迟评估直到它被强制执行(我认为 Lisp 就是这样做的),但是 Javascript 尽可能早地评估?还是我在这里走错了路?

R版

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]]()

Javascript 版本

test = new Array()
for (var i=1; i<=10; i++) {
  test[i] = (function(index) {
    return function() {
      alert(index)
    }
  })(i)
}
test[5]()
test[10]()
4

1 回答 1

3

R 使用惰性求值。你不需要index <- index
你可以使用force(index)


换句话说,在index实际使用该值之前,不会计算 的值。因此,如果在您传递参数和评估参数之间发生任何更改,这些更改将反映在最终输出中。

force,顾名思义,强制评估对象。

当您使用index <- index时,您正在创建一个具有相同名称的不同对象。

于 2013-10-03T14:19:04.190 回答