如何从UNIX命令行运行大于1的arity函数?
示例程序:
-module(test).
-export([sum/2]).
sum(X,Y)->io:write(X+Y).
编译后
erlc test.erl
我正在尝试像
这样的东西erl -noshell -s test sum 5 3 -s init stop
但显然它不起作用,因为它将5 3视为列表......
答案 0 :(得分:5)
创建一个带有列表的函数,如下所示:
-module(test).
-export([sum/2, start/1]).
start(Args) ->
% Pick X and Y args out of Args list and convert to integers
sum(X, Y).
sum(X, Y) -> io:write(X+Y).
现在,当您的命令行将列表传递给start函数时,它将打破列表并执行求和。注意我没有对此进行过测试,但是如果您将参数作为列表获取,它应该可以工作。
答案 1 :(得分:4)
您可以使用-evil开关代替。
erl -eval 'io:format("~p",[hello]).'
答案 2 :(得分:3)
我不知道有什么方法可以解决命名函数接受一个参数的要求。正如Cody所提到的那样,一个参数可以是一个列表,您可以在参数列表定义中对其进行解构。
使用您提供的命令行,这对我有用:
-module(test).
-export([sum/1]).
sum([X, Y]) ->
io:format("X: ~p Y: ~p", [X, Y]),
list_to_integer(atom_to_list(X)) + list_to_integer(atom_to_list(Y)).