记录Erlang中的模式匹配

时间:2017-08-01 17:40:22

标签: erlang

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

df1['Val'] = df1['Val'].replace("''",np.nan)
df2['Val'] = df2['Val'].replace("''",np.nan)

df = df1.set_index('Text').combine_first(df2.set_index('Text')).reset_index()
print (df)
      Text Val
0     This   1
1     That   2
2       Is   3
3      Not   4
4  Working   5

我的代码如下:

** 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. 函数中不匹配。我已经尝试了所有我能找到的但不知道为什么这不起作用。

任何指针都将非常感谢!

1 个答案:

答案 0 :(得分:1)

Erlang记录是元组,但它们有一个额外的字段作为第一个元素:记录的名称。也就是说,根据您已定义的记录,#board{city_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}) ->