范围如何在R中起作用?

时间:2017-09-27 17:22:23

标签: r scoping

override func viewDidLoad() {
        super.viewDidLoad()
        registerSettingsBundle()
        updateDisplayFromDefaults()
    }

当我运行上面的代码时,我得到以下输出:

  

5

     

15

有人可以解释第二个输出是15而不是3吗?当我在函数f中不使用“<< - ”时,相同的代码返回10。

1 个答案:

答案 0 :(得分:2)

只需查看您的函数f返回的内容。

f()
function() {
      a <<- 15
      a <- 5
      return(a)
    }
<environment: 0x000000001f1c7898>

因此,当您将此结果(一个函数)分配给g时,它将成为上述输出中的该函数。当您致电a <<- 3时,代码行g 从不执行 换句话说,第二个输出以相同的方式解释,第一个输出被解释,g设置aglobalenv中存在的变量15并返回在自己的环境中创建的变量a <- 5的值。

修改
请注意,如果像Dason在评论中所说的那样,在致电a之前打印g,其值已更改为3,就像您在问题中所期望的那样。在调用a <<- 3时,确实执行了代码行f

g <- f()   # call 'f'

a          # print 'a', the value has changed
[1] 3

g()        # now call 'g'
[1] 5

a          # and the value of 'a' changed again
[1] 15