【发布时间】:2019-04-12 17:51:33
【问题描述】:
我知道使用全局变量不是一个好习惯,程序员应该尽可能避免使用它。
func foo(a *A) func() *A {
return func() *A {
return a
}
}
如果我在另一个函数bar 中调用foo_closure,这意味着bar 的输出将不依赖于它的输入参数并且bar 不能是纯函数。
现在我看不出通过闭包或全局变量访问a *A 变量之间的区别。在这两种情况下,它们都会使输出变得不可预测。
作为全局变量,闭包可以被认为是一件坏事吗?
附言
其他函数也可以调用foo_closure 并改变其字段。
【问题讨论】:
-
只要你没有改变你的环境(这对于纯函数是必要的),使用来自任何范围的变量都可以——无论是全局范围还是闭包范围。使它们成为具有不可变值的常量。
-
foo_closure是什么,bar是什么,为什么你认为它不能是纯的? -
@Bergi 使它们不必要地全局化,但是,散布全局命名空间。并将它们放在一个闭包中使突变安全(r)(ish)//更多地受到控制。
-
@WillNess 当然,应该将变量放在本地范围/命名空间/任何地方以避免冲突,但我的意思是范围无关紧要:唯一重要的是变量不发生突变.
-
对;没有变异,一切都是纯洁的;如果我们必须进行突变,我们最好控制。
标签: function functional-programming closures global-variables