Erlang/Elixir Erlang 和 Elixir 的互操作

DavidAlphaFox · 发布于 2017年09月27日 · 275 次阅读
84794b

Elixir调用Erlang的代码

Elixir调用Erlang的代码非常简单,就是将Erlang相应的模块前面加上“:”符号。然后用“.”代替Erlang的“:”符号。

好了如下面的Erlang代码

ists:sort([3, 2, 1]).

在Elixir中直接可以写成

:lists.sort([3, 2, 1])

非常简单方便

Erlang调用Elixir代码

首先要在rebar.config中添加Elixir的依赖

deps, [{ elixir, "1.1.*",
         {git, "git://github.com/elixir-lang/elixir",{tag,"v1.1.1"}}}]}.

接着要在rebar.config中添加lib支持

{lib_dirs, [
  "deps/elixir/lib"
]}.

这样我们才能使用Elixir相关的类库。

如果我们想在Rebar工程中混合使用Elixir和Erlang,那么就需要使用rebar的插件了。该插件地址为:https://github.com/yrashk/rebar_elixir_plugin

同样,我们需要在rebar.config中进行下配置

{deps, [{ rebar_elixir_plugin, ".*",
         {git, "git://github.com/yrashk/rebar_elixir_plugin"}}]}.
%% Let rebar know about the new plugins
{plugins, [rebar_elixir_compiler, rebar_exunit] }.

用Rebar生成独立运行的环境

为了能让我们生成独立运行的环境,我们还需要在realtool.config中添加

{app, elixir, [{mod_cond, app},{incl_cond, include},{lib_dir,"../deps/elixir/lib/elixir"}]}

在rebar.config中添加

{post_hooks, [{compile, "rm -rf deps/elixir/ebin"}]}.

这样做是为了让rebar在编译之后删除deps下Elixir没有生成beam的ebin,当我们使用incl_cond的时候,我们才不会发生多个地方存在elixir.app的冲突。

暂无回复。
需要 登录/注册 后方可回复, 如果你还没有账号请点击这里 注册