得到错误:
error FS0193: Type constraint mismatch. The type
'Map<ContentAndYear,DemoMap>'
is not compatible with type
'seq<ContentAndYear * DemoMap>
Run Code Online (Sandbox Code Playgroud)
有问题的代码:Demo是发生错误的地方.
type Demo = Map<ContentAndYear,DemoMap>
type ContentAndYear = Content * Year
let demoMap =
dataMap
|> Seq.ofList
|> Seq.map(fun (content, data) ->
{ Content = content
Year = data.Year
Person = data.Person
NullContent = nullContent.[content].contentraw
PercentContent = nullContent.[content].contentraw
})
|> List.ofSeq
let demolist =
demoMap
|> List.map (fun x -> (x.Content,x.Year) |> ContentAndYear,x)
|> Map.ofList
let x = demolist |> Demo <---- Problem Line
Run Code Online (Sandbox Code Playgroud)
怎么解决?不确定.
您的类型Demo不是新类型,而是别名Map<ContentAndYear, DemoMap>,因此您的最后一行完全等同于:
let x = demoList |> Map<ContentAndYear, DemoMap>
Run Code Online (Sandbox Code Playgroud)
该类型Map<_,_>有一个构造函数,它接受一个seq<'key * 'value>,但你试图传递Map<_,_>给那个构造函数,所以编译器自然会抱怨.
如何解决这个问题取决于你的实际意义.
选项1:如果您的定义Demo是您实际想要的,那么demoMap它已经是类型Demo,所以您可以|> Demo完全删除:
let x = demoMap
Run Code Online (Sandbox Code Playgroud)
选项2:如果您希望最后一行按原样编译,那么您可能Demo想要成为自己的类型,而不是别名.也就是说,你的意思是它有一个构造函数Map<ContentAndYear, DemoMap>:
type Demo = Demo of Map<ContentAndYear, DemoMap>
...
let x = demoMap |> Demo
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
98 次 |
| 最近记录: |