是否可以将记录或类标签作为参数传递给函数?
我不确定这是描述我的问题/问题的最佳方式,也许这个例子可以更好地说明。
这里我硬编码了一个函数来过滤i.a
等于v
的列表。是否有可能使i.a
也可以通过?
示例代码:
type myrecord =
{
a : int;
b : float
}
let abclist = [{ a = 1; b = 2.}; { a = 11; b = 22.}
let filter1 (recordList : List<myrecord>) v =
recordList |> List.filter (fun i -> i.a = v)
如何让i.a
通过?那么,例如,我可以调用函数并过滤i.b
而不是?
我确信它非常简单(就像f#中的大多数内容一样),但我无法击败类型错误信息!
干杯,
dusiod
答案 0 :(得分:1)
我不太确定你要做什么,但这里有一些选择:
filter1 (recordList |> List.map (fun t -> t.b)) v
或将声明更改为
filter1 (recordList: List<myrecord>) (v:'t) (f:myrecord -> 't) =
recordList |> List.filter (fun i -> (f i) = v)
其中f
类似于fun t -> t.b
现有功能的简单版本可能是
recordList |> List.filter (function |{a=A} -> A=v)