【发布时间】:2015-01-09 16:33:43
【问题描述】:
我有以下列表理解
member this.a l1 =
let res = [for x, y in List.zip l1 this.l2 do if y > 0 then yield (x |> double)/(y |> double) else yield 0.]
我得到了错误
类型 '(float -> float)' 不支持 'comparison' 约束。例如,它不支持“System.IComparable” 界面
这个表达式的类型应该是 float -> float 但是 这里有 int 类型
在y > 0 表达式处。
有没有办法让编译器知道x 和y 是某种类型,或者l1 和l2 是同一类型?
编辑:
我实际上拥有的是一个类中的a,已更新以反映这一事实。
【问题讨论】:
-
如果 l1 和 l2 都是 int 列表,您的代码对我来说编译得很好。您能说明一下您的代码中如何声明 l1 和 l2 吗?
-
如果我将
l1和l2变量设置为int list,您的sn-p 在我的F# 交互式窗口中工作。 (Also, here in dotnetfiddle) -
从错误来看,
l2实际上是函数列表float -> float,而不是整数列表。 -
碰巧,在那一行之后,你在like this 做些什么吗?
-
假设@Lee 是错误的(我不认为他是...),您可以像这样指定类型:
[for (y:int) in 1..10 -> y]。不过,这是追踪错误的好方法。
标签: f#