override func viewDidLoad() {
super.viewDidLoad()
registerSettingsBundle()
updateDisplayFromDefaults()
}
当我运行上面的代码时,我得到以下输出:
5
15
有人可以解释第二个输出是15而不是3吗?当我在函数f中不使用“<< - ”时,相同的代码返回10。
答案 0 :(得分:2)
只需查看您的函数f
返回的内容。
f()
function() {
a <<- 15
a <- 5
return(a)
}
<environment: 0x000000001f1c7898>
因此,当您将此结果(一个函数)分配给g
时,它将成为上述输出中的该函数。当您致电a <<- 3
时,代码行g
从不执行
换句话说,第二个输出以相同的方式解释,第一个输出被解释,g
设置a
到globalenv
中存在的变量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