FSharp Data 的 CsvProvider 中 "Load" 返回的类型是什么
What is the type returned by "Load" in FSharp Data's CsvProvider
考虑以下代码:
type EnergyInfo = CsvProvider<"Sample.csv">
let energyInfoBefore = EnergyInfo.Load("File1csv")
let energyInfoAfter = EnergyInfo.Load("File2.csv")
let expectedEnergyInfo =
energyInfoBefore.Rows
|> Seq.sortBy(fun r -> r.SomeProperty)
|> Seq.map(fun r ->
r.Property1,
r.Property2,
r.Property3,
r.Property4,
r.Property5,
r.Property6,
r.Property7)
let actualEnergyInfo =
energyInfoAfter.Rows
|> Seq.sortBy(fun r -> r.SomeProperty)
|> Seq.map(fun r ->
r.Property1,
r.Property2,
r.Property3,
r.Property4,
r.Property5,
r.Property6,
r.Property7)
"expectedInfoBefore" 和 "expectedInfoAfter" 几乎相同,自然我希望只有一个功能。
所以我想我会这样做:
let getEnergyInfo energyInfo=
energyInfo.Rows
|> Seq.sortBy(fun r -> r.SomeProperty)
|> Seq.map(fun r ->
r.Property1,
r.Property2,
r.Property3,
r.Property4,
r.Property5,
r.Property6,
r.Property7)
但是,此时我的代码无法编译,因为 F# 编译器无法推断类型。
但是,我不知道 "energyInfo" 是什么类型。当我将鼠标悬停在后者上时,我被告知它是 "CsvProvider<...>" 类型。
由于我是 F# 和 F# 数据方面的新手,所以我不知道我必须做什么。
您的提供商返回的行的类型为 EnergyInfo.Row
(惊喜!),整个文件的类型为 EnergyInfo
.
编译器告诉你类型是CsvProvider<"Sample.csv">
,因为EnergyInfo
是CsvProvider<"Sample.csv">
的类型别名,编译器在错误信息中扩展了它。它可能会尝试提供更多帮助,但我不确定一般情况下是否可行。
您可以通过添加类型注释让编译器知道正确的类型:
let getEnergyInfo (energyInfo: EnergyInfo) =
energyInfo.Rows
|> Seq.sortBy(fun r -> r.SomeProperty)
|> Seq.map(fun r ->
r.Property1,
r.Property2,
r.Property3,
r.Property4,
r.Property5,
r.Property6,
r.Property7)
考虑以下代码:
type EnergyInfo = CsvProvider<"Sample.csv">
let energyInfoBefore = EnergyInfo.Load("File1csv")
let energyInfoAfter = EnergyInfo.Load("File2.csv")
let expectedEnergyInfo =
energyInfoBefore.Rows
|> Seq.sortBy(fun r -> r.SomeProperty)
|> Seq.map(fun r ->
r.Property1,
r.Property2,
r.Property3,
r.Property4,
r.Property5,
r.Property6,
r.Property7)
let actualEnergyInfo =
energyInfoAfter.Rows
|> Seq.sortBy(fun r -> r.SomeProperty)
|> Seq.map(fun r ->
r.Property1,
r.Property2,
r.Property3,
r.Property4,
r.Property5,
r.Property6,
r.Property7)
"expectedInfoBefore" 和 "expectedInfoAfter" 几乎相同,自然我希望只有一个功能。
所以我想我会这样做:
let getEnergyInfo energyInfo=
energyInfo.Rows
|> Seq.sortBy(fun r -> r.SomeProperty)
|> Seq.map(fun r ->
r.Property1,
r.Property2,
r.Property3,
r.Property4,
r.Property5,
r.Property6,
r.Property7)
但是,此时我的代码无法编译,因为 F# 编译器无法推断类型。
但是,我不知道 "energyInfo" 是什么类型。当我将鼠标悬停在后者上时,我被告知它是 "CsvProvider<...>" 类型。
由于我是 F# 和 F# 数据方面的新手,所以我不知道我必须做什么。
您的提供商返回的行的类型为 EnergyInfo.Row
(惊喜!),整个文件的类型为 EnergyInfo
.
编译器告诉你类型是CsvProvider<"Sample.csv">
,因为EnergyInfo
是CsvProvider<"Sample.csv">
的类型别名,编译器在错误信息中扩展了它。它可能会尝试提供更多帮助,但我不确定一般情况下是否可行。
您可以通过添加类型注释让编译器知道正确的类型:
let getEnergyInfo (energyInfo: EnergyInfo) =
energyInfo.Rows
|> Seq.sortBy(fun r -> r.SomeProperty)
|> Seq.map(fun r ->
r.Property1,
r.Property2,
r.Property3,
r.Property4,
r.Property5,
r.Property6,
r.Property7)