Elixir 获取伞形项目中的应用程序名称
我有一个伞形项目(Elixir 获取伞形项目中的应用程序名称,elixir,Elixir,我有一个伞形项目(我的应用程序)如下: ├── 自述文件 ├── 应用程序 │ ├── 应用程序1 │ | └── mix.exs │ ├── 附件二 | | └── mix.exs │ └── ... ├── 配置 └── mix.exs 我想获取当前正在运行的应用程序的名称, 例如:app\u one,app\u two 当我使用: Mix.Project.get.Project[:app] 我总是得到主项目名我的应用程序 我该怎么做?您可以使用:app
我的应用程序
)如下:
├── 自述文件
├── 应用程序
│ ├── 应用程序1
│ | └── mix.exs
│ ├── 附件二
| | └── mix.exs
│ └── ...
├── 配置
└── mix.exs
我想获取当前正在运行的应用程序的名称,例如:
app\u one
,app\u two
当我使用:
Mix.Project.get.Project[:app]
我总是得到主项目名
我的应用程序
我该怎么做?您可以使用:application.get\u application/1
获取a模块所属的应用程序。如果将\uuuu模块\uuuu
作为第一个参数传递,则将获得当前模块所属的应用程序
$ cat apps/a/lib/a.ex
defmodule A do
def hello do
:application.get_application(__MODULE__)
end
end
$ cat apps/b/lib/b.ex
defmodule B do
def hello do
:application.get_application(__MODULE__)
end
end
$ iex -S mix
iex(1)> A.hello
{:ok, :a}
iex(2)> B.hello
{:ok, :b}
Erlang的:application.get_application/1
是application.get_application/1
。如果模块未在任何应用程序规范中列出,则返回nil
iex> Application.get_application MyApp.ExistingModule
:my_app
iex> Application.get_application MyApp.NonExistingModule
nil
“当前正在运行”是指拥有您正在编写代码的模块的应用程序?例如,app_one/***.ex
中的任何模块都应返回:app_one
?通常是模块所在的应用程序。但是,例如,如果模块位于一个仅仅是库的应用程序中,并且由另一个应用程序使用,那么我想让该应用程序使用库(而不是库本身)。如果app\u two
调用app\u one
哪个调用库呢?现在app\u two
正在使用app\u one
和app\u one
正在使用库。我想我想要app\u one。这是实际运行的应用程序(运行application.exs文件的应用程序),因为我希望当前运行的应用程序是第一个启动的应用程序。我建议您给出:application.which|u application |>列表。首先
一个go,返回三个值的元组<代码>{:app'app',2.0.7'}
。但是请注意,当我们使用Erlang功能时,应用程序描述和版本将作为charlist返回。我不知道起跑顺序是否在任何情况下都可以信赖。到目前为止,它对我来说是可靠的。