给出以下模块:
run(N)->
timer:tc(?MODULE,fct,[N]).
我通过run(100)调用它。从一个shell,我有这个:
{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)而不是整数! 我的错在哪里?
答案 0 :(得分:2)
在Erlang中,[100]
和"d"
无法区分,上面显示的代码不是问题。 Erlang shell非常有用(对于某些帮助值)并将[100]
打印为"d"
,因为它是一个仅包含表示可打印字符的整数的列表。
真正的问题是上面的undef
错误,我的猜测是你的解析器模块不包含你通过parser:loop/1
调用的函数parser:fct/1
。
答案 1 :(得分:0)
您的编辑是否收到任何警告?我怀疑你会看到至少一条关于未使用功能的消息。在您学习的过程中,如果您看到警告消息,则进行调查,了解并更正。一般来说,您希望代码没有警告消息。
如果在MFA样式中调用函数,则必须在源代码中导出它。根据你所展示的内容,不清楚它是否被命名为“fct”或“loop”。因此,请确保您的命名是一致的,并确保它是导出的:您需要在源代码中使用它(假设该函数被称为“循环”并且需要1个参数):
-export([环路/ 1])。
首先,Erlang中的错误消息可能很难解密。花些时间阅读更多内容并熟悉它们,您将为自己节省大量时间。