Elixirでモジュール外に公開する定数を定義する方法
Elixirでモジュール外に公開する定数を定義する方法はあるのでしょうか?
モジュール内で使う場合はアットリビュートを使うのが一般的なようです。
http://elixir-ja.sena-net.works/getting_started/14.html#14.2-定数として---as-constants
一方で、モジュール外に公開する定数を定義したい場合はどのような方法を取るのが一般的でしょうか?
まず、下記コードの1のようなアットリビュートはモジュール外からは参照できません。
2のように関数を定数のように扱えば可能ですが、できれば3のような形式で定数は定数として扱えればと思っています。
defmodule Sample do
# 1. アットリビュート(モジュール内でのみ参照可能)
@private_const_value 1
# 2. 関数を定数のように扱う(これは可能)
def const_value_func, do: 3
# 3. 定義イメージ(コンパイルエラー)
PUBLIC_CONST_VALUE = 2
end
defmodule Client do
def foo() do
# 1. アットリビュートは他モジュールでは参照不可
IO.puts "CONST = #{Sample.@private_const_value}"
# 2. 関数を定数として使う
IO.puts "CONST = #{Sample.const_value_func}"
# 3. 他モジュールで定義した定数を参照
IO.puts "CONST = #{Sample.PUBLIC_CONST_VALUE}"
end
end
英語版にマルチポストしました。
https://stackoverflow.com/questions/47861754/how-to-define-shared-constant-on-elixir