【问题标题】:Case expression in Erlang escriptErlang escript 中的 case 表达式
【发布时间】:2017-05-30 07:42:18
【问题描述】:

我正在测试我的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"

是什么导致了这个问题?参数格式不对吗?

【问题讨论】:

    标签: linux erlang


    【解决方案1】:

    命令行参数作为字符串传递给main/1,而不是原子,所以你需要匹配"start""stop",而不是startstop

    ...
    main([Action]) ->
        case Action of
            "start" -> start();
            "stop" -> stop()
        end;
    ...
    

    除非你的实际代码更复杂/不同,你也可以直接在函数子句中匹配["start"]["stop"]

    main(["start"]) -> start();
    main(["stop"]) -> stop();
    main(_) ->
        usage().
    

    这将调用 usage()./escript foo 以及您的原始脚本会崩溃,这可能是也可能不是您想要的。

    【讨论】:

      猜你喜欢
      • 2016-07-28
      • 2011-09-01
      • 2020-09-12
      • 1970-01-01
      • 2019-05-05
      • 1970-01-01
      • 2020-07-03
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多