使用Erlang中的Elixir模块失败
我试图在Erlang模块中使用从Elixir源代码编译的beam文件。运行Erlang节点时会出现错误,但我可以直接使用Elixir中的代码 长生不老药模块:使用Erlang中的Elixir模块失败,erlang,elixir,Erlang,Elixir,我试图在Erlang模块中使用从Elixir源代码编译的beam文件。运行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_multipl
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
编译两个:
$rm-f*.beam
$elixirc recursion.ex$erlc use\u recur.erl 运行Erlang: $erl-run use_recur hey-run init stop-noshell{“init终止于do_boot”{unde,[{'Elixir.IO',put,['Hello!'],[]},{'Elixir.Recursion',多次打印,2,[{file,'Recursion.ex},{line,7}},{init start_em,1,[]},{init do_boot,3,[]} init终止于do_boot({unde,[{Elixir.IO,put,Hello!,[]},{Elixir.Recursion,多次打印,2,[{},{},{}]},{init,start_em,1,[]},{init,do_boot,3,[]}) 正在将崩溃转储写入:erl_Crash.dump…完成 长生不老药:
Recursion.print_multiple_times "Hello!", 3
成功运行:
$ elixir elx_recur.exs
Hello!
Hello!
Hello!
为什么会这样?我认为Erlang的输出应该是相同的。错误意味着Erlang找不到名为
'Elixir.IO'
的模块。本模块是core Elixir的一部分。您需要使用-pa
(或其他类似标志,如-pz
)将Elixir安装的ebin
文件夹添加到Erlang的加载路径,以使Erlang加载Elixir的核心库,因为该文件夹包含Elixir core的编译后的.beam
文件,包括Elixir.IO.beam
erl -pa /path/to/elixir/ebin ...
您可能需要使用
-pa
(例如erl-pa/path/to/Elixir/ebin…
)将包含Elixir的beam文件的目录添加到erl
)。该错误意味着Erlang无法找到'Elixir.IO'
模块。Alexanders MacBook Air:~alexander$erl-pa/usr/local/Cellar/Elixir/1.4.5/lib/Elixir/ebin-run use\u recur hey-run init stop-noshell您好!你好你好Alexanders MacBook Air:~alexander$ls/usr/local/cillar/elixir/1.4.5/lib/elixir/ebin/| grep elixir.String.beam elixir.String.beam你能把这条评论作为一个答案转发给我吗?
erl -pa /path/to/elixir/ebin ...