Erlang,使用警卫之前的语法错误
Posted
技术标签:
【中文标题】Erlang,使用警卫之前的语法错误【英文标题】:Erlang, Syntax error before using a guard 【发布时间】: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 的初学者,所以我可能在途中错过了一些东西。
【问题讨论】:
【参考方案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.
【讨论】:
以上是关于Erlang,使用警卫之前的语法错误的主要内容,如果未能解决你的问题,请参考以下文章
为啥 erlang spawn 函数调用中出现语法错误 - “之前的语法错误:')'”?
之前的 Erlang 语法错误:第 55 行中的 'end'