问题描述
由于引用了 let one = 1
,以下代码将无法编译。
为什么?似乎它没有副作用(并且也是线程安全的) - 因为不可能更改不可变数据。
let one = 1
func one_plus(v: int): int =
one + v
echo one_plus(2)
这样的代码 - 指的是外部不可变数据 - 是否应该在 Nim 中以不同的方式编写以被视为无副作用?
解决方法
我的猜测是问题在于使用全局命名空间,将代码包装到 proc 中使其编译和运行:
proc main() =
let one = 1
func one_plus(v: int): int =
one + v
echo one_plus(2)
main()
如果还想使用全局,则需要使用const section:
const one = 1
func one_plus(v: int): int =
one + v
echo one_plus(2)