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# 函数定义倾向于做以下两件事之一:
定义尽可能少的类型 (
let foo x y = ...
)。大多数函数都是这种情况。或者……显式定义每个参数的类型和返回类型(
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/