我似乎总是遇到在同一代码块中使用2“end”的问题,例如:
Worker = fun (File) ->
{ok, Device} = file:read_file([File]),
Li = string:tokens(erlang:binary_to_list(Device), "\n"),
Check = string:join(Li, "\r\n"),
FindStr = string:str(Check, "yellow"),
if
FindStr > 1 -> io:fwrite("found");
true -> io:fwrite("not found")
end,
end,
消息是“之前的语法错误:'结束'”
答案 0 :(得分:4)
您需要删除逗号到结尾的逗号。
Worker = fun (File) ->
{ok, Device} = file:read_file([File]),
Li = string:tokens(erlang:binary_to_list(Device), "\n"),
Check = string:join(Li, "\r\n"),
FindStr = string:str(Check, "yellow"),
if
FindStr > 1 -> io:fwrite("found");
true -> io:fwrite("not found")
end
end,
答案 1 :(得分:2)
规则很简单 - 所有“语句”都以逗号开头,除非它们 碰巧是最后一次。
您的if
表达式是传递给fun
的块中的最后一个(foreach
)。这意味着它
不需要尾随,
。
所以
end
end,
是你需要的。一个更简单的例子:
L = [1, 2, 3, 4],
lists:foreach(
fun(X) ->
Y = 1,
if
X > 1 -> io:format("then greater than 1!~n");
true -> io:format("else...~n")
end
end,
L
)