【问题标题】:Erlang, Syntax error before using a guardErlang,使用警卫之前的语法错误
【发布时间】:2015-02-24 15:37:25
【问题描述】:
map_search_pred(Map,Pred) where is_map(Map)-> map_search_pred(maps:to_list(Map), Pred);
map_search_pred([H|Tail], Pred) -> 
    case Pred(H) of
        true -> H;
        false -> map_search_pred(Tail, Pred)
    end;
map_search_pred([], Pred) -> {error, Pred}.

我在“where”第 7 行之前遇到语法错误,即此代码中的第 1 行。我不知道为什么会这样,但是我仍然是 erlang 的初学者,所以我可能在途中错过了一些东西。

【问题讨论】:

    标签: syntax erlang


    【解决方案1】:

    以关键字when而不是where开头的保护序列,

    Name(Pattern11,...,Pattern1N) [when GuardSeq1] ->
        Body1;
    ...;
    Name(PatternK1,...,PatternKN) [when GuardSeqK] ->
        BodyK.
    

    where 应在代码中替换为when

    map_search_pred(Map,Pred) when is_map(Map)-> map_search_pred(maps:to_list(Map), Pred);
    map_search_pred([H|Tail], Pred) -> 
        case Pred(H) of
            true -> H;
            false -> map_search_pred(Tail, Pred)
        end;
    map_search_pred([], Pred) -> {error, Pred}.
    

    【讨论】:

      猜你喜欢
      • 2014-03-19
      • 2019-11-25
      • 2011-04-06
      • 2014-06-08
      • 2022-01-12
      • 2015-01-27
      • 2018-12-22
      • 2019-03-09
      • 2012-05-16
      相关资源
      最近更新 更多