为啥常见的 Erlang 应用程序(Common Test、Dialyzer、leex、yecc 等)在 `erl` shell 中不可用?
Posted
技术标签:
【中文标题】为啥常见的 Erlang 应用程序(Common Test、Dialyzer、leex、yecc 等)在 `erl` shell 中不可用?【英文标题】:Why are common Erlang application (Common Test, Dialyzer, leex, yecc etc.) not available in the `erl` shell?为什么常见的 Erlang 应用程序(Common Test、Dialyzer、leex、yecc 等)在 `erl` shell 中不可用? 【发布时间】:2019-04-14 20:19:25 【问题描述】:回到 Erlang,我注意到我无法运行任何有自己的用户指南的支持框架,例如 EUnit、Common Test、leex、yecc、Dyalizer、Typer 等。
根据Common Test User's Guide,“Common Test 应用程序与 Erlang/OTP 系统一起安装”并且“不需要额外的安装步骤”。我认为这对其他人也是如此,而且我确信我缺少一些基本的东西。
【问题讨论】:
所有这些工具都有一些合适的Erlang“入口点”函数,调用这个函数应该可以工作(假设你没有在嵌入模式下启动你的节点/shell)。这可能是由 shell 的自动完成功能引起的误解,该功能基于已加载的内容? 非常感谢!我尝试明确输入函数,但我想我不是一个好的打字员......我也更新了我的答案,但从技术上讲这是你的答案,所以如果你提交自己的,那么我会接受它;不想因此而受到赞扬。 【参考方案1】:@aronisstav 对“基于已加载内容的 shell 自动完成功能引起的误解的评论一针见血。再次引用他的话,正确答案是:
所有这些工具都有一些合适的 Erlang“入口点”功能和 调用这个函数应该可以工作(假设你没有开始你的 嵌入模式下的节点/shell)。
在下面尝试一下,它们奏效了(我想我只是个白痴):
6> leex:file("./program.erl").
./program.erl.xrl: no such file or directory
error
7> dialyzer:gui().
要让 shell 自动完成工作,只需在 erl
shell 中使用 code:load_file/1
或 l(Module)
加载模块:
$ erl
1> code:load_file(ct).
module,ct
2> l(dialyzer).
module,dialyzer
【讨论】:
模块未“预加载”这一事实并不会使它们“不可用”。您实际上并不需要显式加载它们;只要它们在加载路径中,调用其中的任何函数都会自动加载它们(假设您没有以嵌入式模式启动节点/shell)。所有这些工具都有一些合适的 Erlang “入口点”,可以在没有显式l(...)
的情况下使用。以上是关于为啥常见的 Erlang 应用程序(Common Test、Dialyzer、leex、yecc 等)在 `erl` shell 中不可用?的主要内容,如果未能解决你的问题,请参考以下文章