gpt4 book ai didi

Haskell 继承、数据、构造函数

转载 作者:行者123 更新时间:2023-12-03 03:11:27 25 4
gpt4 key购买 nike

所以我想为我的 Asteroids 游戏/作业定义多个数据类:

data One = One {oneVelocity :: Velocity, onePosition :: Position, (((other properties unique to One)))}
data Two = Two {twoVelocity :: Velocity, twoPosition :: Position, (((other properties unique to Two)))}
data Three = Three {threeVelocity :: Velocity, threePosition :: Position, (((other properties unique to Three)))}

正如您所看到的,我有多个数据类,它们具有一些重叠的属性(速度、位置)。这也意味着我必须为每个数据类指定不同的名称(“oneVelocity”、“twoVelocity”...)。

有没有办法让这些类型的数据扩展某些东西?我想过使用带有多个构造函数的一种数据类型,但其中一些当前的数据类非常不同,我不认为它们应该驻留在具有多个构造函数的一个数据类中。

最佳答案

您可能应该只对所有这些使用单一数据类型,但在具体细节上参数化:

data MovingObj s = MovingObj
{ velocity :: Velocity
, position :: Position
, specifics :: s }

然后你可以创建例如asteroid::MovingObj AsteroidSpecifics,但您也可以编写与任何此类移动对象一起使用的函数,例如

advance :: TimeStep -> MovingObj s -> MovingObj s
advance h (MovingObj v p s) = MovingObj v (p .+^ h*^v) s

关于Haskell 继承、数据、构造函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52896071/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com