2

我正在尝试为我正在做的项目创建 som 示例数据。为此,我需要一个简单的对象结构,其中对象包含一组对象。在这种情况下,可以保存评论的评论家。代码如下所示:

type Review = 
  { MovieName: string;
    Rating: double }

type Critic = 
  { Name: string;
    Ratings: Review[] }

let theReviews = [{ MovieName = "First Movie"; Rating = 5.5 }; { MovieName = "Second Movie"; Rating = 7.5 };]

let theCritic = { Name = "The Critic"; Ratings = [{ MovieName = "First Movie"; Rating = 5.5 }; { MovieName = "Second Movie"; Rating = 7.5 };]  }

“评论”行工作正常,但我无法让“评论家”行工作。我得到的错误是:

错误 1 ​​此表达式的类型应为 Review []
,但此处的类型为 'a list

我怎样才能让它工作?

4

2 回答 2

4

数组文字使用[| ... |]而不是[ ... ]列表文字 - 你需要类似的东西

let theCritic = { Name = "The Critic"; Ratings = [|{ MovieName = "First Movie"; Rating = 5.5 }; { MovieName = "Second Movie"; Rating = 7.5 };|]  }

这解释了错误 - 您使用了列表文字而不是数组文字

于 2012-12-23T23:55:01.697 回答
1

实际上,您在 Review 定义中使用数组,在实现中使用列表。这些是真正不同的野兽,列表是不可变的(更好的并发性)并且支持模式匹配,而数组是可变的。我建议您继续使用列表,除了长集合(真的很长)

如果您希望继续使用列表,您可以这样做:

 type Review = 
  { MovieName: string;
   Rating: double }


 type Critic = 
   { Name: string;
    Ratings: Review list }

在这里,您有一个关于列表和数组之间差异的更详细列表:

http://en.wikibooks.org/wiki/F_Sharp_Programming/Arrays#Differences_Between_Arrays_and_Lists ...

于 2012-12-25T06:13:21.580 回答