3

R と Javascript の具体的な違いは何ですか。つまり、次の 2 つの非常によく似た例では、最初の無名関数のパラメーターの値を「修正」するために 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 に答える