我正试图在Erlang模块中使用从Elixir源代码编译的束文件。当我运行Erlang节点时,它会引发错误,但是我可以直接使用来自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
endErlang模块:
-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 -run init停止-noshell {"init in do_boot“、{undef、[{'Elixir.IO‘)、"Hello!”、[]}、{'Elixir.Recursion’、print_multiple_times,2、{file、"recursion.ex"}、{line、7}、{init、start_em,1、[]}、{init、do_boot,3、[]}}在do_boot ({undef )中终止。[{Elixir.IO,puts,Hello!,[]},{Elixir.Recursion,print_multiple_times,2,{},{}},{init,start_em,1,[]},{init,do_boot,3,[]}}) 正在将崩溃转储写入: erl_crash.dump...done
灵丹妙药脚本:
Recursion.print_multiple_times "Hello!", 3成功运行:
$ elixir elx_recur.exs
Hello!
Hello!
Hello!为什么会发生这种事?我认为Erlang的产出应该是一样的。
发布于 2017-07-09 21:37:15
该错误意味着Erlang无法找到名为'Elixir.IO'的模块。这个模块是核心药剂的一部分。您需要使用ebin (或其他类似的标志,如-pz)将您的Elixir安装的-pa文件夹添加到Erlang的加载路径中,以使Elixir的核心库加载,因为该文件夹包含已编译的.beam文件,包括Elixir.IO.beam。
erl -pa /path/to/elixir/ebin ...https://stackoverflow.com/questions/45000895
复制相似问题