我正在测试我的erlang escript,escriptis的内容如下:
#!/usr/bin/env escript
main([Action]) ->
case Action of
start -> start();
stop -> stop()
end;
main(_) ->
usage().
usage() ->
io:format("usage: factorial integer\n"),
halt(1).
start() -> io:format("Start.~n").
stop() -> io:format("Stop.~n").
但当我试图运行escript时,我遇到了一个问题:
./escript start
escript: exception error: no case clause matching "start"
是什么导致了这个问题?论点的格式是错误的吗?
最佳答案
命令行参数作为字符串传递给main/1
,而不是atoms,因此需要匹配"start"
和"stop"
,而不是start
和stop
:
...
main([Action]) ->
case Action of
"start" -> start();
"stop" -> stop()
end;
...
除非您的实际代码更复杂/不同,否则您还可以直接在function子句中匹配
["start"]
和["stop"]
:main(["start"]) -> start();
main(["stop"]) -> stop();
main(_) ->
usage().
当您的原始脚本将崩溃时,这也将为
usage()
调用./escript foo
,这可能是您想要的,也可能不是您想要的。关于linux - Erlang脚本中的案例表达,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/41659947/