Вызов внешней функции Erlang

Я пытаюсь вызвать функцию (из внешнего модуля) в erlang. оба файла луча расположены в одном каталоге.

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

Тогда я звоню

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

это дает следующую ошибку. Я проверил отдельные модули на наличие ошибок. он компилируется без каких-либо ошибок или предупреждений.

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)

Не уверен, почему он выдает ошибку арифметического выражения.


person Tharanga Abeyseela    schedule 16.01.2014    source источник


Ответы (1)


Вы можете прочитать документацию, чтобы понять, что результат {ok, Term} . Вы можете попробовать функцию io:read/1 в консоли, тогда вы увидите следующее:

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

Это означает, что вам нужно деконструировать результат io:read/1 по-другому, например, так:

-module(ask).
-export([term/0]).
term() ->
   {ok, {_, Distance}} = io:read("Enter {x, distance} > "),
   drop2:fall_velocity(Distance).
person Dmitry Belyaev    schedule 16.01.2014