【问题标题】:Piplining and functions with multiple parameters. Is `fun x ->` the F# way?流水线和具有多个参数的函数。 `fun x ->` 是 F# 方式吗?
【发布时间】:2022-10-20 00:13:58
【问题描述】:

对于低于我 f# noob 心的第一个 sn-p,我觉得第二个 sn-p 更好(没有 fun z ->):

let json = ...
        |> Seq.map(fun z -> new ...) 
        |> fun z -> JsonSerializer.Serialize(z, options = new JsonSerializerOptions( WriteIndented = true))
let serialise z = JsonSerializer.Serialize(z, options = new JsonSerializerOptions( WriteIndented = true))

let json = ...
        |> Seq.map(fun z -> new ...) 
        |> serialise 

如果我想传递参数,那么感觉会更好:

let serialise options z = JsonSerializer.Serialize(z, options = options)

let json = ...
        |> Seq.map(fun z -> new ...) 
        |> serialise (new JsonSerializerOptions( WriteIndented = true ))

在学习语言时,我想本着它的精神做事,因此我的问题是:

这些形式中的任何一种都是“更多 F#”吗?

【问题讨论】:

    标签: f#


    【解决方案1】:

    这是一个意见问题,所以没有正确答案。就个人而言,我几乎从不直接通过管道输入 lambda (|> fun z ->),也不会费心编写 curried serialise 函数,除非它会被多次调用。所以我会这样写:

    let json =
        let things =
            ... |> Seq.map (fun z -> new ...)
        JsonSerializer.Serialize(
            things,
            new JsonSerializerOptions(WriteIndented = true))
    

    请注意,things 的范围仅限于 json 块,因此它不会污染其余代码。

    【讨论】:

      【解决方案2】:

      您的第三种选择通常是我首选的做事方式。最终,我专注于可读性和可重构性,并以此指导我的方法。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-06-15
        • 1970-01-01
        • 2013-10-17
        • 1970-01-01
        • 2013-05-11
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多