次の例で異なる結果を生成するために、C#とRが異なるスコープルールを誰かが指摘できますか?
C#
public static void Main(string[] args)
{
var funs = new Action<string>[5];
for (int i = 0; i < 5; i++)
{
int j = i;
{
funs[j] = x => Console.WriteLine(j);
}
}
funs[2]("foo"); // prints 2
}
R
funclist <- list()
for(i in 1:5)
{
{
j<-i
funclist[[j]] <- function(x) print(j)
} // the 5 inner blocks share the same scope?
}
funclist[[2]]('foo') // prints 5
アップデート
この質問は役に立ちますR: ローカル変数の使用法
私は違いを見つけたと思います-Rには、ブロックが新しいスコープを作成すると言っているドキュメントはありません。したがって、関数のみが新しいスコープを作成できます。 for ループは作成できません。ブラケットは作成できません。
関数以外のブラケットが新しいスコープを作成しないことを明確に述べているRの決定的なガイドへのリンクを教えてくれる人はいますか?