我正在读一个伪代码。我多次遇到这个<<-
。 <<-
有什么意义?这是什么意思?在使用<<-
运算符时,我们需要考虑或注意什么?
答案 0 :(得分:9)
来自帮助文件?"<<-"
:
运营商&lt;&lt; - & - &gt;&gt;通常只用于函数,和 导致搜索通过父环境进行搜索 被分配的变量的定义。如果找到这样的变量 (并且它的绑定没有被锁定)然后重新定义它的值,否则 任务发生在全球环境中。注意他们的 语义与S语言不同,但在语言中很有用 与R的范围规则相结合。参见'The R Language 定义'手册以获取更多详细信息和示例。
以下是一个例子:
foo <- function(){
a <<- 1
}
现在运行它,看看它如何在全局环境中创建新对象a
:
a
Error: object 'a' not found
foo()
a
[1] 1
人们应该试图避免这种情况的原因是它打破了函数式编程范式。在函数式编程中,人们编写的函数仅依赖于它们的输入而不会产生副作用。
<<-
的副作用是在父环境中创建一个新对象,因此不再是函数式编程。
在大多数日常使用中,没有必要使用<<-
,虽然它在使用具有状态的闭包时很有用,即记住他们过去所做的事情。这在Hadley的devtools wiki