我正在测试我的erlang escript,escript的内容是这样的:
#!/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"
是什么导致了这个问题?参数的格式是错误的吗?
答案 0 :(得分:1)
命令行参数作为字符串传递给main/1
,而不是原子,因此您需要匹配"start"
和"stop"
,而不是start
和stop
:
...
main([Action]) ->
case Action of
"start" -> start();
"stop" -> stop()
end;
...
除非您的实际代码更复杂/不同,否则您还可以直接在函数子句中匹配["start"]
和["stop"]
:
main(["start"]) -> start();
main(["stop"]) -> stop();
main(_) ->
usage().
这会为usage()
调用./escript foo
,同时原始脚本会崩溃,这可能是您想要的,也可能不是。