nic*_*las 1 ienumerable f# list-comprehension
我想知道为什么第二行报告编译器错误
类型关系与seq <'a>不兼容
而第一个推断r的类型关系.
type Microsoft.Office.Interop.Access.Dao.Database with
member x.f() =
let relations = [for r in x.Relations -> r]
let relations2 = x.Relations |> Seq.map id
()
Run Code Online (Sandbox Code Playgroud)
什么精确的属性可以循环使用for?
// 编辑复制步骤:
我在VS2012中创建了一个空白解决方案,添加对Microsoft.Office.Interop.Access.Dao的引用,并粘贴下面的代码.
module toto =
type Class1() =
member this.X = "F#"
type Microsoft.Office.Interop.Access.Dao.Database with
member x.f() =
let relations = [for r in x.Relations -> r]
let relations2 = x.Relations |> Seq.map id
()
Run Code Online (Sandbox Code Playgroud)
r被输入为Relation,而不是obj
这并不完全与你所说的完全相符,但是一个序列表达式可以工作但不是Seq.map一个类型实现System.Collections.IEnumerable但不是System.Collections.Generic.IEnumerable<'T>(又名seq<'T>)的场景.例如,在此代码t中推断为obj list,但下一行不编译.
type T() =
interface System.Collections.IEnumerable with
member x.GetEnumerator() = (Seq.init 10 id).GetEnumerator() :> _
let t = [for x in T() -> x]
let t2 = T() |> Seq.map id //ERROR: The type 'T' is not compatible with the type 'seq<'a>'
Run Code Online (Sandbox Code Playgroud)
对于在.NET 2.0之前创建的库,此方案尤其常见.
| 归档时间: |
|
| 查看次数: |
1002 次 |
| 最近记录: |