假设我有这些记录:
data Group = Group { id :: Id, name :: Name }
derive Show Group
data Game = Game { world :: World, groups :: [Group], random :: FRandom }
derive Show Game
我想在游戏中添加一个新组,但我想避免调用Game构造函数,因为如果稍后我向游戏添加一个字段,我不想更改所有的游戏构造函数调用。 假设我想在游戏实例中添加一个新组。最好的方法是什么?
答案 0 :(得分:1)
这很容易。
假设:
game = Game { .... } -- some game
newgroup = Group { .... } -- some new group
你只是说:
game' = game.{groups <- (newgroup:)}
拼写出来:
从游戏构建新游戏,但通过将(newgroup :)函数应用于旧组值来更改组字段。当然,这可以将新群体纳入以前存在的群体的前端,因此它相当于:
ng = newgroup : game.groups
game' = game.{groups = ng}
Marimuthu在这里有一篇很好的博客文章:http://mmhelloworld.github.io/blog/2014/03/15/frege-record-accessors-and-mutators/
您决定不使用Game构造函数是非常明智的。 事实上,在这种情况下我做的是创建一个“默认”值,并使用以下内容从默认值中创建一个新值:
rec.{name = value, another <- function, ...}
语法。