【发布时间】:2021-06-12 05:33:51
【问题描述】:
我可以定义与模块共享的常量吗?
一般来说,我们使用模块属性来表示模块内部的常量。 http://elixir-lang.github.io/getting-started/module-attributes.html#as-constants
如果我想让其他模块可以使用常量,我该怎么做? 起初,模块属性仅在模块(1)内部可用。 我知道我可以将函数用作常量(2)。 但如果可能的话,我想用像 3 这样的专用形式来定义常量。
defmodule Sample do
# 1. module attribute(available only inside module)
@private_const_value 1
# 2. function as constant(possible in any rate)
def const_value_func, do: 3
# 3. ideal form(but compile error)
public_const_value = 2
end
defmodule Client do
def foo() do
IO.puts "CONST = #{Sample.@private_const_value}" # compile error
IO.puts "CONST = #{Sample.const_value_func}"
IO.puts "CONST = #{Sample.public_const_value}" # compile error
end
end
后记
我希望常量满足以下要求。
- 编译时评估
- 按模块分类(我的意思是应该在适当的模块中定义常量)
【问题讨论】:
-
我曾经使用config(如
Application.get_env)来定义与模块共享的常量。 -
@YongHaoHu 您的评论澄清了我的问题。我添加了关于常量要求的后记。
-
简短回答——不,没有办法获得您在上面的选项 #3 中展示的持续行为。另一件事是 Elixir 对值名称区分大小写,因此使用 ALL_CAPS 会带来其他问题。
-
@OnorioCatenacci 正如你所说,大写变量会误导另一个讨论。我把名字从大写改成了小写。
标签: elixir