为了好玩,我想在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.
函数中不匹配。我已经尝试了所有我能找到的但不知道为什么这不起作用。
任何指针都将非常感谢!
答案 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}) ->