我可以在其他应用程序或模块中使用现有的OTP应用程序吗?

时间:2016-03-27 19:24:47

标签: erlang otp erlang-shell

我正在构建一个需要使用以前构建的OTP应用程序的系统(让我们称之为X)。如果我想构建一个新的OTP应用程序/模块,我该如何使用模块中已存在的应用程序?

我假设我可以调用start,因为它遵循application行为,因此我构建了一个简约应用程序Y,它具有以下代码:

y.erl:

-module(y).
-behaviour(application).

start(_StartType, _StartArgs) ->
  io:format("going to call x_app~n"),
  {ok, _} = x_app:start([]),
  io:format("called x_app~n"),
  y:start_link().

stop(_State) ->
  ok = x_app:stop([]),
  ok.

Rebar成功编译此代码并且不会生成任何警告 rel/y/bin/y start完全没有输出(我希望得到至少一个io:format的输出) rel/y/bin/y stop输出Node is not running!

1 个答案:

答案 0 :(得分:3)

您需要在x中列出应用rebar作为相关应用,或者在.app.src文件中使用{application, your_app, [{description,"your application"}, {vsn, "0.1"}, {modules,[]}, {registered, []}, {mod,{your_app,[]}}, {env, []}, {applications,[kernel, stdlib, x]}]}. 后列出

x

请注意,最后一行x被列为应用程序依赖项。这导致Erlang应用程序控制器确保在启动应用程序之前启动x。如果您通过application's .app resource file在Erlang shell中以交互方式启动应用程序,则此声明将确保在应用程序启动之前首先启动titles = ['Title: Sub', 'Title Sub', 'Title - Sub'] s = ': -' if titles[1].translate(None, s) == titles[2].translate(None, s): match = 'True' else match = 'False'

相关问题