外部函数调用Erlang

External function call Erlang

我试图在Erlang中调用一个函数(来自外部模块)。两个beam文件都位于同一目录中。

1
2
3
 -module(drop2).
 -export([fall_velocity/1]).
 fall_velocity(Distance) -> math:sqrt(2 * 9.8 * Distance).

那我打电话来

1
2
3
4
5
6
-module(ask).
-export([term/0]).
term() ->
Input = io:read("Enter {x,distance} ? >>"),
Term = element(2,Input),
drop2:fall_velocity(Term).

它给出了以下错误。我测试了各个模块的错误。它正在编译,没有任何错误或警告。

1
2
3
4
5
Eshell V5.10.2  (abort with ^G)
1> ask:term().
Enter {x,distance} ? >>{test,10}.
** exception error: an error occurred when evaluating an arithmetic expression
 in function  drop2:fall_velocity/1 (drop2.erl, line 3)

不知道它为什么抛出算术表达式错误。


您可以阅读文档来确定结果是{ok, Term}。您可以在控制台中尝试io:read/1功能,然后您将看到以下内容:

1
2
3
4
1> io:read("Enter >").
Enter > {test, 42}.
{ok,{test,42}}
2>

这意味着您需要以不同的方式解构io:read/1的结果,例如:

1
2
3
4
5
-module(ask).
-export([term/0]).
term() ->
   {ok, {_, Distance}} = io:read("Enter {x, distance} >"),
   drop2:fall_velocity(Distance).