将记录/类标签作为参数传递

时间:2013-07-04 22:24:25

标签: parameters f# label parameter-passing labels

是否可以将记录或类标签作为参数传递给函数?

我不确定这是描述我的问题/问题的最佳方式,也许这个例子可以更好地说明。

这里我硬编码了一个函数来过滤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

1 个答案:

答案 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)