【发布时间】:2019-06-14 20:40:15
【问题描述】:
在“escript”in the Erlang docs 中有一个阶乘函数的简单实现。阶乘函数如下:
fac(0) -> 1;
fac(N) -> N * fac(N-1).
没关系,我可以让它工作,没问题。
不过,我想知道如何使用 rebar3 以“OTP 方式”实现同样的简单阶乘函数?
为了清楚起见,我的问题是:
- 代码去哪了?
- 如何从 shell 调用它?
- 我是否也可以像通过 escript 示例一样从命令行运行它?
仅供参考,我已经开始使用rebar3。这是我所在的位置:
rebar3 new app factorial
创建一些文件,但具体而言,代码位于 src 目录中的 3 个文件中。我可以看到正在使用主管,似乎很好。
我可以通过 shell 与这个项目进行交互:
$ rebar3 shell
1> application:which_applications().
[{factorial,"An OTP application","0.1.0"},
{inets,"INETS CXC 138 49","7.0.3"},
{ssl,"Erlang/OTP SSL application","9.1.1"},
{public_key,"Public key infrastructure","1.6.4"},
{asn1,"The Erlang ASN1 compiler version 5.0.8","5.0.8"},
{crypto,"CRYPTO","4.4"},
{stdlib,"ERTS CXC 138 10","3.7"},
{kernel,"ERTS CXC 138 10","6.2"}]
2> application:stop(factorial).
=INFO REPORT==== 21-Jan-2019::12:42:07.484244 ===
application: factorial
exited: stopped
type: temporary
ok
3> application:start(factorial).
ok
【问题讨论】:
-
您为什么如此专注于脚本?我试过一次,但是对于我的所有程序,我都使用 erlang shell 来编译和运行我的 .erl 文件,其中包含我的 erlang 代码。无论如何,我第一次尝试钢筋是详细的here,也许它会对你有所帮助。
-
并不是我专注于 escripts,而是因为我已经让它们工作,所以以这种方式构建问题是有意义的。来自 Python 的 escript 很有意义:获取您的参数,将它们传递给一些函数。在这一点上,我还没有摸索 OTP。
标签: erlang erlang-otp