R语言 词汇范围与动态范围
R是一种开源的编程语言,被广泛用作统计软件和数据分析工具。R通常带有命令行界面。R可以在Windows、Linux和macOS等广泛使用的平台上使用。此外,R编程语言是最新的尖端工具。一种语言的范围界定规则负责确定在R语言的函数中如何将值与自由变量联系起来。
词汇范围
在词汇范围中,变量的范围是由程序的文本结构决定的。我们今天使用的大多数编程语言都是词法范围的。甚至,人类可以通过正确地阅读代码来确定一个变量的范围。下面是R语言中词法范围的一个代码。
输出
在这个例子中,首先,为a创建了一个映射。在下一行,我们定义了一个函数b,它返回某个a的值。在第3行,我们定义了一个函数c,它为a创建一个新的映射,然后调用b。
动态范围
在动态范围中,变量取的是分配给该变量的最新值
这里,考虑一下上面的同一个例子。
输出
根据动态规则,这段代码的输出应该是2,因为分配给变量a的最新值是2。
R语言 范围
有时,在R语言中,代码会出现动态范围,这发生在一个函数被定义在全局环境中,也被从全局环境中调用,导致定义和调用的环境相同,这可以在下面的例子中描述出来。
输出
在这个例子中,g是在定义它的环境中查找的,因此a的值是10。在动态范围内,一个变量的值是在它被调用的环境中查找的。在R中,这个环境被称为父环境,所以在函数f中,a的值是2,而在g中,值是10。这可能会造成R语言是一种动态语言的错觉,但实际上,它是一种词汇范围语言。下面是R语言编程中词汇范围和动态范围的一些区别。
词法范围和动态范围的区别
词汇范围 | 动态范围 |
---|---|
在这个变量中,指的是最高级别的环境 | 在这种情况下,变量与最近的环境有关 |
通过阅读代码很容易找到范围。 | 在这种情况下,程序员必须预见到所有可能的环境 |
它取决于代码的编写方式 | 它取决于代码的执行方式 |
程序的结构决定了哪个变量被引用。 | 程序堆栈的运行时状态决定了该变量。 |
它是程序文本的属性,与实时堆栈无关。 | 它依赖于实时堆栈而不是程序文本。 |
它提供了较少的灵活性 | 它提供了更多的灵活性 |
在词法范围内访问非本地变量是快速的。 | 在动态范围内访问非本地变量需要更多时间。 |
本地变量可以被保护,以便被本地变量访问。 | 没有办法保护被子程序访问的局部变量。 |