1

假设我有这些记录:

data Group = Group { id :: Id, name :: Name }
derive Show Group

data Game = Game { world :: World, groups :: [Group], random :: FRandom }
derive Show Game

我想向游戏添加一个新组,但我想避免调用 Game 构造函数,因为如果稍后我向游戏添加一个字段,我不想更改所有 Game 构造函数调用。假设我想向游戏实例添加一个新组。最好的方法是什么?

4

1 回答 1

1

这很简单。

鉴于:

game = Game { .... }   -- some game
newgroup = Group { .... } -- some new group

你只是说:

game' = game.{groups <- (newgroup:)}

拼写:

从游戏中构建一个新游戏,但通过将 (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, ...} 

句法。

于 2014-09-29T18:32:28.190 回答