gpt4 book ai didi

f# - 定义样式首选项

转载 作者:行者123 更新时间:2023-12-04 22:52:20 26 4
gpt4 key购买 nike

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/

26 4 0
文章推荐: assembly - 为什么 FLD1 改为加载 NaN?
文章推荐: flash - 是否有用于构建 AIR 应用程序的免费工具?
文章推荐: regex - 如何在 Scala 中从较大的字符串中提取有效的电子邮件
文章推荐: select - 尊重空白填充以固定宽度显示列