f# - 定义样式首选项

标签 f#

F# 定义的首选风格是什么?

book我正在学习经常使用以下样式:

let foo = fun x y -> 
    let aux1 = fun z -> z * 2 
        in aux1 x + 
    let aux2 = fun q -> q * 3 
        in aux2 y;;

另一方面,当我在网上寻找信息时,最有可能遇到这样的事情:

let foo (x: int) (y: int) =
    let aux1 (z:int) = z * 2
        in aux1 x +
    let aux2 (q: int) = q * 3
        in aux2 y;;

关于Guide我没有找到关于它的引用。这是否超出了“纯粹风格”的范畴?这两种方法背后有效率影响吗?

您的经验表明什么?

最佳答案

作为一般规则,F# 函数定义倾向于做以下两件事之一:

  1. 定义尽可能少的类型 (let foo x y = ...)。大多数函数都是这种情况。或者……

  2. 显式定义每个参数的类型和返回类型(let foo (x : int) (y : int) : int = ... .

样式 #2 很少见,我经常看到它用于明确属于模块 API 一部分的函数,并且还有 /// 注释来提供文档。不过,对于内部函数,通常使用无类型变体,因为 F# 的类型推断非常有效。

此外,正如 s952163 在评论中指出的那样,in 关键字几乎不再使用,因为 #light 样式使其变得不必要。我希望看到您的示例代码以现代 F# 风格编写如下:

let foo x y =
    let aux1 z = z * 2
    let aux2 q = q * 3
    (aux1 x) + (aux2 y)

也不需要 ;; ,除非您在 F# Interactive 控制台中输入。如果您使用 VS Code + Ionide,并突出显示代码段并按 Alt + Enter 将它们发送到 F# Interactive,那么您不需要任何 ;;分隔符,因为 Ionide 会自动添加它们。

关于f# - 定义样式首选项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46601630/

相关文章:

f# - 如何在 F# 中为 Xamarin.Forms 创建自定义渲染器

f# - 这个 F# 字节数组 -> 字符串切片器可以变得更快吗? (F#)

f# - 如何表达不变性保证

f# - F#中的循环列表

bitmap - 将 .png 加载到位图

f# - 变量是否可以在一系列管道运算符期间引用自身,F#

f# - 自动 F# 签名文件 (.fsi) 生成

multithreading - F# MailboxProcessor 问题

concurrency - 将 Post 或 PostAndAsyncReply 与 F# 的 MailboxProcessor 一起使用?

c# - 通过在 C# 中使用更多静态方法,我能否获得与函数式编程 (F#) 相同的好处?