【发布时间】:2016-06-03 01:43:03
【问题描述】:
我正在尝试在 clojure 中定义几个常量变量。有没有办法在一个 def 语句中定义所有这些?还是我必须分别定义每一个?
在任何编程语言(C++ Java)中,您可能希望能够执行以下操作
const int x, y, z;
x = y = z = 0;
但是,在 clojure 中,我在使用 def 声明做类似的事情时遇到了麻烦。我已经尝试了一些基于 'let' 语法的东西:
(def ^:const [x 2 y 3 z 8])
类似的东西
(def ^:const x 2 y 3 z 8)
但这些都不起作用。我必须分别定义每个变量吗?
【问题讨论】:
-
请注意,clojure 中的
^:const不会像其他语言中的const那样做,特别是 var 总是可变的,^:const元数据告诉编译器它可以内联原始值,但确实无论如何都不会阻止您错误地更改它 -
哦。那么,有没有办法在 clojure 中创建最终的不可变值??
-
当然,例如,我们有不可变的数据结构。但是 vars 是一个可变容器。
-
我想补充一点,虽然 vars 是可变的,但您通常不会以编程方式更改它们的(根)值,除非有时在动态开发中。
-
您的 C/C++ 错误。我能通过编译器的最接近的是`const int x = 0, y = 0, z = 0;`,它分别定义了每个变量。
标签: variables clojure constants