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