如何在F#类型声明中声明一个列表

16

我学习F#还只有几天的时间,所以这是一个初学者的问题:

我学会了这样声明一个新类型:

type GameEntity = 
    {
        Position : Vector3<m>
        Velocity : Vector3<m/s>
        Acceleration : Vector3<m/s^2>
    }

(假设Vector3和Meausure已在其他位置声明,这部分工作正常)。现在我想要声明另一种类型,其中包含GameEntity列表。 我尝试了以下内容:

type GameWorld = 
    {
        name : string;
        entities : GameEntity = []   //error
    }

有人能给我展示一下如何正确声明一个之前定义类型(GameEntity)的列表(entities)的语法吗?

2个回答

16

你可以使用:

entities : GameEntity list
或者
entities : List<GameEntity>

这些表达式是否等效,还是一个创建了.NET通用集合,另一个创建了F#集合? - User
这是语法糖:typeof<int list> = typeof<List<int>> 返回true。但是:打开System.Collections.Generic; typeof<int list> = typeof<List<int>>,将会返回false。 - Vitaliy

7
为了补充Vitaliy的回答,你尝试声明的是F#中的一个记录类型:
type GameWorld = 
    {
        name : string;
        entities : GameEntity list
    }

使用记录(records),您可以利用模式匹配,在F#中非常强大。如果您需要与其他使用C#或VB.NET编写的.NET组件进行交互,则类可能是一个不错的选择。此外,类允许在其声明中使用let绑定,而记录则不行:

type GameWorld(name: string, entities: GameEntity list) = 
        let mutable state = 1 // class allows let bindings

        member x.Name = name;
        member x.Entities = entities

如果没有构造函数参数怎么办? - symbiont

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接