所以我想为我的小行星游戏/作业定义多个数据类:
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
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)