使用Erlang的Elixir模块失败

时间:2017-07-09 20:50:17

标签: erlang elixir

我正在尝试在Erlang模块中使用从Elixir源编译的beam文件。当我运行Erlang节点时它会引发错误,但我可以直接使用Elixir中的代码。

Elixir模块:

defmodule Recursion do
  def print_multiple_times(msg, n) when n <= 1 do
    IO.puts msg
  end

  def print_multiple_times(msg, n) do
    IO.puts msg
    print_multiple_times(msg, n - 1)
  end
end

Erlang模块:

-module(use_recur).
-define(elixir__recursion, 'Elixir.Recursion').

-export([hey/0]).

hey() ->
    ?elixir__recursion:print_multiple_times("Hello!", 3).

编译两者:

  

$ rm -f * .beam   $ elixirc recursion.ex
  $ erlc use_recur.erl

运行Erlang:

  

$ erl -run use_recur hey -run init stop -noshell {&#34; init终止于do_boot&#34;,{undef,[{&#39; Elixir.IO&#39;,puts,[&#34 ;你好&#34;!],[]},{&#39; Elixir.Recursion&#39;,print_multiple_times,2,[{文件,&#34; recursion.ex&#34;},{线,7} ]},{INIT,start_em,1,[]},{INIT,do_boot,3,[]}]}}   init终止于do_boot({undef,[{Elixir.IO,puts,Hello!,[]},{Elixir.Recursion,print_multiple_times,2,[{},{}]},{init ,start_em,1,[]},{INIT,do_boot,3,[]}]})

     

崩溃转储正在写入:erl_crash.dump ...已完成

Elixir脚本:

Recursion.print_multiple_times "Hello!", 3

成功运行:

$ elixir elx_recur.exs  
Hello!
Hello!
Hello!

为什么会这样?我说Erlang的输出应该是一样的。

1 个答案:

答案 0 :(得分:3)

错误意味着Erlang无法找到名为'Elixir.IO'的模块。该模块是核心Elixir的一部分。您需要使用ebin(或其他类似的标记,如-pa)将Elixir安装的-pz文件夹添加到Erlang的加载路径中,以使Erlang加载Elixir的核心库,作为该文件夹包含Elixir核心的已编译.beam文件,包括Elixir.IO.beam

erl -pa /path/to/elixir/ebin ...