2011-01-20 71 views
0

考虑以下模块:定时器:TC与参数

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

我把它通过运行(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被解释为一个char($ d = 100),而不是为整数! 我的错在哪里?

回答

2

在Erlang中,[100]"d"是无法区分的,您在上面显示的代码不是问题。 Erlang外壳正在帮助(对于某些帮助值)并将[100]设置为"d",因为它是一个仅包含表示可打印字符的整数的列表。

真正的问题是上面的undef错误,我的猜测是您的解析器模块不包含您通过parser:fct/1调用的函数parser:loop/1

+0

你是对的!我失明了:出口失踪了!感谢的 – Bertaud 2011-01-20 22:01:48

0

您在汇编时是否收到过任何警告?我怀疑你至少会看到一条关于未使用函数的消息。正如你所了解的,如果你看到一条警告信息,然后调查它,理解并纠正它。一般来说,你希望你的代码没有警告信息。

如果函数在MFA风格中调用,那么它必须在源代码中导出。从你显示的内容来看,它不清楚它是否被命名为“fct”或“loop”。所以,确保你的命名是一致的,并确保它被导出:你需要在你的源代码中使用这个函数(假设这个函数被称为“loop”并且有1个参数):

-export([loop/1] )。

Erlang中的错误消息起初可能难以破译。花点时间阅读更多内容,并更熟悉它们,你将为自己节省大量时间。

+0

你也是对的。我不知道如何接受几个答案... – Bertaud 2011-01-20 22:12:56