таймер: tc с аргументом - PullRequest
       4

таймер: tc с аргументом

0 голосов
/ 20 января 2011

Учитывая следующий модуль:

run(N)-> timer:tc(?MODULE,fct,[N]).

Я называю это run (100).из оболочки и у меня есть это:

{1, {'EXIT',{undef,[{parser,loop,"d"}, {timer,tc,3}, {erl_eval,do_apply,5}, {shell,exprs,7}, {shell,eval_exprs,7}, {shell,eval_loop,3}]}}}

100 интерпретируется как символ ($ d = 100), а не как целое число!Где моя вина?

Ответы [ 2 ]

2 голосов
/ 20 января 2011

В Erlang [100] и "d" неразличимы, код, который вы показываете выше, не является проблемой. Оболочка Erlang полезна (для определенных значений справки) и печатает [100] как "d", потому что это список, содержащий только целые числа, представляющие печатаемые символы.

Реальная проблема заключается в ошибке undef в приведенном выше, я думаю, что ваш модуль синтаксического анализатора не содержит функцию parser:loop/1, которую вы вызываете через parser:fct/1.

0 голосов
/ 21 января 2011

Вы получили какие-либо предупреждения в вашей компиляции? Я подозреваю, что вы увидите хотя бы одно сообщение о неиспользуемой функции. Когда вы учитесь, если вы видите предупреждающее сообщение, то изучите его, поймите и исправьте. Вообще говоря, вы хотите, чтобы в вашем коде не было предупреждений.

Если функция вызывается в стиле MFA, ее необходимо экспортировать в исходном коде. Из того, что вы показали, не ясно, называется ли оно «fct» или «loop». Итак, убедитесь, что ваши имена совпадают, и убедитесь, что они экспортированы: вам нужно это в вашем исходном коде (при условии, что функция называется «loop» и принимает 1 аргумент):

-export ([цикл / 1]).

Вначале сообщения об ошибках в Erlang могут быть сложными для расшифровки. Потратьте некоторое время, чтобы прочитать больше и познакомиться с ними, и вы сэкономите много времени в будущем.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...