1

たとえば、同じコードブロックで2つの「終了」を使用すると、常に問題が発生するようです。

 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,

メッセージは「前の構文エラー: 'end'」です

4

2 に答える 2

5

と 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,
于 2013-01-23T09:26:08.027 に答える
2

ルールは単純です。すべての「ステートメント」は、たまたま最後でない限り、前にコンマを付けます。

あなたの式は、 に渡されifたブロック () の最後です。つまり、末尾は必要ありません。funforeach,

そう

  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
 )
于 2013-01-23T09:23:00.157 に答える