声明的情况下的或类似特征?或者更通用的模式?

时间:2011-07-26 17:34:46

标签: functional-programming erlang design-patterns case matching

我一直在学习Erlang一段时间,为了学习它,我正在编写一个IRC机器人。这个IRC机器人应该在“!command”和“Nick:command”表单中监听命令。我预先解析了IRC协议,因此我必须只匹配发送消息。我正在使用这样的二进制模式:

case Msg of
    [Nick, _, <<"PRIVMSG">>, <<"#",Channel/binary>>, <<"!rock">>] ->
        irckybot_api:privmsg(<<"#",Channel/binary>>, [Nick, choose_hand(rock)]),
        {ok, State};
    [Nick, _, <<"PRIVMSG">>, <<"#",Channel/binary>>, <<BNick:Len/binary,": rock">>] ->
        irckybot_api:privmsg(<<"#",Channel/binary>>, [Nick, choose_hand(rock)]),
        {ok, State};
end

我是对的,我必须写两个模式吗?我不能将这两种模式合并为一种吗?也许有更通用的模式?我真的不知道......

LG,  CK

1 个答案:

答案 0 :(得分:4)

我想它可以更好地写成:

case Msg of
  [Nick, _, <<"PRIVMSG">>, <<"#",Channel/binary>>, X] ->
    case X of
       <<"!rock">> -> ....;
       <<BNick:Len/binary,": rock">> -> .......
    end;
  _ -> .......
end