0

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

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

在这里,我硬编码了一个函数来过滤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# 中的大多数东西一样),但我无法击败类型错误消息!

干杯,

杜西奥德

4

1 回答 1

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)
于 2013-07-04T23:18:41.053 回答