Erlang和Elixir的互操作

Elixir调用Erlang的代码

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

好了如下面的Erlang代码

lists: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的冲突。

你可能感兴趣的:(erlang,rebar,互操作,elixir,ERTS)