在foreach循环中使用if语句

时间:2013-01-23 09:12:56

标签: erlang

我似乎总是遇到在同一代码块中使用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,

消息是“之前的语法错误:'结束'”

2 个答案:

答案 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
 )