有人可以指出 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: usage of local variables
我相信我发现了差异 - 在 R 中,没有文件说一个块会创建一个新的范围。所以只有函数可以创建一个新的范围,for循环不能,括号不能。
任何人都可以给我一个指向 R 中一些权威指南的链接,该指南明确指出除了函数之外的括号不会创建新的范围?