Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/actionscript-3/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Erlang中的记录模式匹配_Erlang - Fatal编程技术网

Erlang中的记录模式匹配

Erlang中的记录模式匹配,erlang,Erlang,为了好玩,我试着在Erlang和Google中重新制作我最喜欢的一款棋盘游戏 我正在尝试模式匹配嵌套记录,无论我尝试什么,我总是得到错误消息: ** exception error: no function clause matching kingoftokyo_server:add_player("john", {gamestate,[],[],[],[]}) (kingoftokyo_server.erl, line 40

为了好玩,我试着在Erlang和Google中重新制作我最喜欢的一款棋盘游戏 我正在尝试模式匹配嵌套记录,无论我尝试什么,我总是得到错误消息:

** exception error: no function clause matching 
                kingoftokyo_server:add_player("john",
                  {gamestate,[],[],[],[]}) (kingoftokyo_server.erl, line 40)
我的代码如下所示:

 -record(player,{playerName,cards,energy}).
 -record(board,{city_center,outside}).
 -record(gamestate,{board,player,dices,game_round}).

 add_player(Name,{Board,{PlayerName,Cards,Energy},Dices,Game_round}) ->
    NewList = lists:append(Name, PlayerName),
    NewState = {Board,{NewList,Cards,Energy},Dices,Game_round},
    NewState.
我不明白为什么
add\u player
函数中的子句不匹配。我已经尝试了所有我能找到的,但不明白为什么这不起作用


任何指点都将不胜感激

Erlang记录是元组,但它们有一个额外的字段作为第一个元素:记录的名称。也就是说,对于您定义的记录,
#board{city\u center=1,outside=2}
等于
{board,1,2}
。虽然您可以使用元组模式来提取字段,但如果您决定对任何字段重新排序,这将中断。您可以使用记录模式匹配语法按字段名称匹配字段

以下代码应适用于您:

add_player(Name,
           #gamestate{
             board = Board,
             player = #player{playerName = PlayerName, cards = Cards, energy = Energy},
             dices = Dices,
             game_round = Game_round}) ->