我试图将更多“数据”添加到玩家数据库中,但我得到了一些意想不到的结果:
数据类型声明:
data Player= Player teamName player goals
deriving (Show, Read)
type teamName = String
type player = String
type goals = [Int]
Run Code Online (Sandbox Code Playgroud)
db :: [Players]
db = [
Player "Bayern" "Lewandowski" [3, 52, 16, 3],
Player "Tottenham" "Kane" [11, 31, 3, 2]
]
Run Code Online (Sandbox Code Playgroud)
我用来向数据库添加新玩家的代码。
addPlayer :: Player -> [Players] -> [Players]
addPlayer playerInfo database = database++[playerInfo]
Run Code Online (Sandbox Code Playgroud)
用于显示给定数据库中的所有玩家:
showAllPlayers :: [Players] -> String
showAllPlayers [] =""
showAllPlayers [x] = getPlayer x
showAllPlayers (x:xs) = getPlayer x ++ "\n" ++ showAllPlayers xs
Run Code Online (Sandbox Code Playgroud)
当尝试运行该行时,addPlayer(Player "Man UTD" "Rooney" [5, 6, 2, 11]) db)它一切正常,并且在控制台中它说已添加了该行。输出:
[Player "Bayern" "Lewandowski" [3, 52, 16, 3],Player "Tottenham" "Kane" [11, 31, 3, 2],Player "Man UTD" "Rooney" [5, 6, 2, 11]]
但是当我运行代码输出所有玩家时putStrnLn(showAllPlayers data),我尝试添加的玩家不在列表中?
addPlayers不修改其数据库参数;相反,它返回一个更新的数据库。所以正确的调用是:
putStrLn (showAllPlayers (addPlayer (Player "Man UTD" "Rooney" [5, 6, 2, 11]) db))
Run Code Online (Sandbox Code Playgroud)