2014-02-19 3 views
0

Я недавно начал изучать erlang, но столкнулся с ошибкой, которая только меня озадачила.Ошибка синтаксиса Erlang перед: 'end'

Ошибка syntax error before: 'end' на последней строке. Я посмотрел примеры, которые пытались найти ошибку, но в настоящий момент я полностью потерян. Есть идеи?

ChannelToJoin = list:keysearch(ChannelName,1,State#server_st.channels), 
case ChannelToJoin of 
    % Channel exists. 
    {value, Tuple} -> 
     if 
      %User is not a member of the channel 
      not list:member(UserID, Tuple) -> 
      %Add the user to the channel 
      Tuple#channel.users = list:append(Tuple#channel.users, [UserID]); 


      % If the user is already a member of the channel. 
      true -> true 
     end; 
    %Channel doesn't exist 
    false -> 
     %Create new channel and add the user to it. 
     NewState = State#server_st{channels = list:append(State#server_st.channels, NewChannel = #channel{name = ChannelName, users = [UserID]} 
end 
+0

Можете ли вы разместить больше кода? Это выглядит хорошо для меня, за исключением того, что вы пытаетесь обновить запись 'Tuple' в' if'. Помните: переменные в erlang доступны только для чтения – ZeissS

ответ

5

Второй по последней строке, NewState = ..., не хватает два закрывающих скобок: )}

Также обратите внимание, что вы не можете использовать lists:member внутри if, так как вызов функции не допускаются внутри защитных выражений (что что if позволяет использовать). Вместо этого используйте case:

case lists:member(UserID, Tuple#channel.users) of 
    false -> 
     %% Add the user to the channel 
     ...; 
    true -> 
     %% Already a member 
     ok 
end 
+0

Приветствия, это было действительно полезно! – user2270439

Смежные вопросы