以下是我用来从记录类型中提取特定值的代码示例:
let ExtractVal1 = // signature - 'seq<float[]>[]'
projectCF // signature - 'seq<Records>[]'
|> Array.Parallel.map (fun x ->
x |> Seq.map (fun y -> y.Val1) // Val1 is one of the values in my record type
)
let ExtractVal2 =
projectCF
|> Array.Parallel.map(fun x->
x |> Seq.map (fun y -> y.Val2) // Val2 is another one of the values in my record type
)
以上工作正常,但会导致大量重复(因为我必须为我想要提取的5个值中的每一个重复此操作)。如果可以定义单个函数并传递我想要提取给它的每个值的名称,那么更清洁的是什么。下面是我想要做的事情的一个例子(虽然这段代码显然不起作用):
let ExtractAnyVal (anyval: MyRecord.x) =
projectCF
|> Array.Parallel.map (fun x->
x |> Seq.map (fun y -> y.anyval)
)
let ExtractVal1 = ExtractAnyVal val1
let ExtractVal2 = ExtractAnyVal val2
我的问题是,我可以在F#中实现上述内容吗?
答案 0 :(得分:4)
为什么不让 accessor -function成为这样的参数:
let extract f =
projectCF
|> Array.Parallel.map (Seq.map f)
并像
一样使用它let extractVal1 = extract (fun y -> y.Val1)
let extractVal2 = extract (fun y -> y.Val2)
请注意我无法测试代码,因为您没有包含足够的信息 - 因此可能会出现一些错误