Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/elixir/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Elixir应用程序中的共享常量_Elixir - Fatal编程技术网

Elixir应用程序中的共享常量

Elixir应用程序中的共享常量,elixir,Elixir,保持不同elixir应用程序之间可以共享的常量的最佳方法是什么 就我而言,我有系统中不同类型付款的速记。 e、 g 等等。我想让这些值在应用程序之间共享。Erlang提供了两个神奇的功能,和 构建您自己的映射(不要对键使用大写符号,虽然它们确实是原子,但它们是为模块名称保留的。它们无论如何都不是常量。) 并将其存储到顶级目录中的某个文件中: File.write!("path/to/file", :erlang.term_to_binary(shared_constants)) ~/elixi

保持不同elixir应用程序之间可以共享的常量的最佳方法是什么

就我而言,我有系统中不同类型付款的速记。 e、 g


等等。我想让这些值在应用程序之间共享。

Erlang提供了两个神奇的功能,和

构建您自己的映射(不要对键使用大写符号,虽然它们确实是原子,但它们是为模块名称保留的。它们无论如何都不是常量。)

并将其存储到顶级目录中的某个文件中:

File.write!("path/to/file", :erlang.term_to_binary(shared_constants))
~/elixir_programs$ tree app1

app1
├── README.md
├── _build
│   └── dev
│       └── lib
│           └── app1
│               ├── consolidated
│               │   ├── Elixir.Collectable.beam
│               │   ├── Elixir.Enumerable.beam
│               │   ├── Elixir.IEx.Info.beam
│               │   ├── Elixir.Inspect.beam
│               │   ├── Elixir.List.Chars.beam
│               │   └── Elixir.String.Chars.beam
│               └── ebin
│                   ├── Elixir.App1.beam
│                   ├── Elixir.Constants.beam
│                   └── app1.app
├── config
│   └── config.exs
├── lib
│   ├── app1.ex
│   └── constants.ex
├── mix.exs
└── test
    ├── app1_test.exs
    └── test_helper.exs

9 directories, 16 files
完成后,可以从任何位置访问此地图:

shared_constants =
  "path/to/file"
  |> File.read!()
  |> :erlang.binary_to_term()
和访问值,如下所示:

shared_constants.credit_card
#⇒ "ccd"

旁注:FWIW,乔·阿姆斯特朗回答问题“”:


Erlang提供了两个神奇的功能,和

构建您自己的映射(不要对键使用大写符号,虽然它们确实是原子,但它们是为模块名称保留的。它们无论如何都不是常量。)

并将其存储到顶级目录中的某个文件中:

File.write!("path/to/file", :erlang.term_to_binary(shared_constants))
~/elixir_programs$ tree app1

app1
├── README.md
├── _build
│   └── dev
│       └── lib
│           └── app1
│               ├── consolidated
│               │   ├── Elixir.Collectable.beam
│               │   ├── Elixir.Enumerable.beam
│               │   ├── Elixir.IEx.Info.beam
│               │   ├── Elixir.Inspect.beam
│               │   ├── Elixir.List.Chars.beam
│               │   └── Elixir.String.Chars.beam
│               └── ebin
│                   ├── Elixir.App1.beam
│                   ├── Elixir.Constants.beam
│                   └── app1.app
├── config
│   └── config.exs
├── lib
│   ├── app1.ex
│   └── constants.ex
├── mix.exs
└── test
    ├── app1_test.exs
    └── test_helper.exs

9 directories, 16 files
完成后,可以从任何位置访问此地图:

shared_constants =
  "path/to/file"
  |> File.read!()
  |> :erlang.binary_to_term()
和访问值,如下所示:

shared_constants.credit_card
#⇒ "ccd"

旁注:FWIW,乔·阿姆斯特朗回答问题“”:

那么:

defmodule Constants do
  def credit_card, do: "ccd"
  def cash_on_delivery, do: "cod"
end
应用程序目录:

File.write!("path/to/file", :erlang.term_to_binary(shared_constants))
~/elixir_programs$ tree app1

app1
├── README.md
├── _build
│   └── dev
│       └── lib
│           └── app1
│               ├── consolidated
│               │   ├── Elixir.Collectable.beam
│               │   ├── Elixir.Enumerable.beam
│               │   ├── Elixir.IEx.Info.beam
│               │   ├── Elixir.Inspect.beam
│               │   ├── Elixir.List.Chars.beam
│               │   └── Elixir.String.Chars.beam
│               └── ebin
│                   ├── Elixir.App1.beam
│                   ├── Elixir.Constants.beam
│                   └── app1.app
├── config
│   └── config.exs
├── lib
│   ├── app1.ex
│   └── constants.ex
├── mix.exs
└── test
    ├── app1_test.exs
    └── test_helper.exs

9 directories, 16 files
附录1.ex:

defmodule App1 do
  @moduledoc """
  Documentation for App1.
  """

  @doc """
  Hello world.

  ## Examples

      iex> App1.hello
      :world

  """
  def hello do
    IO.puts "Hello #{Constants.credit_card}"
  end
end
以及:

如果您不想一直写入前缀“Constants”,则可以导入Constants模块:

defmodule App1 do
  @moduledoc """
  Documentation for App1.
  """

  @doc """
  Hello world.

  ## Examples

      iex> App1.hello
      :world

  """
  import Constants
  def hello do
    IO.puts "Hello #{credit_card()}"  #...but need the trailing parentheses
  end
end
那么:

defmodule Constants do
  def credit_card, do: "ccd"
  def cash_on_delivery, do: "cod"
end
应用程序目录:

File.write!("path/to/file", :erlang.term_to_binary(shared_constants))
~/elixir_programs$ tree app1

app1
├── README.md
├── _build
│   └── dev
│       └── lib
│           └── app1
│               ├── consolidated
│               │   ├── Elixir.Collectable.beam
│               │   ├── Elixir.Enumerable.beam
│               │   ├── Elixir.IEx.Info.beam
│               │   ├── Elixir.Inspect.beam
│               │   ├── Elixir.List.Chars.beam
│               │   └── Elixir.String.Chars.beam
│               └── ebin
│                   ├── Elixir.App1.beam
│                   ├── Elixir.Constants.beam
│                   └── app1.app
├── config
│   └── config.exs
├── lib
│   ├── app1.ex
│   └── constants.ex
├── mix.exs
└── test
    ├── app1_test.exs
    └── test_helper.exs

9 directories, 16 files
附录1.ex:

defmodule App1 do
  @moduledoc """
  Documentation for App1.
  """

  @doc """
  Hello world.

  ## Examples

      iex> App1.hello
      :world

  """
  def hello do
    IO.puts "Hello #{Constants.credit_card}"
  end
end
以及:

如果您不想一直写入前缀“Constants”,则可以导入Constants模块:

defmodule App1 do
  @moduledoc """
  Documentation for App1.
  """

  @doc """
  Hello world.

  ## Examples

      iex> App1.hello
      :world

  """
  import Constants
  def hello do
    IO.puts "Hello #{credit_card()}"  #...but need the trailing parentheses
  end
end

您还可以使用[Poison][1]库将地图存储在json文件中,使用
Poison.encode
毒药。解码。如果你对这个变体有什么意见,我很有兴趣读一下。[1] :@NathanRipert
binary to_term/1
速度极快,不需要任何第三方库。我完全没有理由在这里使用JSON。顺便说一句,现在最好的JSON解析器是由Elixir核心团队成员之一MichałMuskała编写的。此外,JSON不支持元组序列化,而
binary_to_term/1
支持元组序列化。您还可以使用[Poison][1]库将地图存储在JSON文件中,使用
Poison.encode
毒药。解码。如果你对这个变体有什么意见,我很有兴趣读一下。[1] :@NathanRipert
binary to_term/1
速度极快,不需要任何第三方库。我完全没有理由在这里使用JSON。顺便说一句,现在最好的JSON解析器是由Elixir核心团队成员之一MichałMuskała编写的。此外,JSON不支持元组序列化,而
binary\u to\u term/1
支持元组序列化。是的,还可以创建一个由存储这些常量的
GenServer
支持的应用程序。如果您想要创建一个模块,模块应该使用宏声明
\u,基本上将常量作为模块属性
@credit\u card
@cash\u on\u delivery
公开,这些常量可以通过
使用MyConstants
获得,而不会用冗余函数污染名称空间。是的,还可以创建一个由存储这些常量的
GenServer
支持的应用程序。如果您想要创建一个模块,该模块应该使用宏声明
\u,基本上将常量作为模块属性
@credit\u card
@cash\u on\u delivery
公开,这些常量可以通过
使用MyConstants
获得,而不会用冗余函数污染名称空间。