1

考虑以下两个示例:

let myList = [0..10]
List.map (fun x -> x + 5)
    (List.filter (fun x -> x % 3 = 0) myList)

let myList = [0..10]
List.map (fun x -> x + 5) (List.filter (fun x -> x % 3 = 0) myList)

这两个示例产生相同的结果:

val myList : int list = [0; 1; 2; 3; 4; 5; 6; 7; 8; 9; 10]
val it : int list = [5; 8; 11; 14]

F# 是一种对空格敏感的语言,这两个示例在技术上是否存在差异?

4

1 回答 1

9

我认为F# Code Formatting Guidelines对你很有帮助,尤其是第一节关于缩进的一般规则

以下是该页面的相关摘录:

当你打断长行时,行的延续必须比封闭结构缩进更远。例如,函数参数的缩进必须比函数名的第一个字符更远,如下面的代码所示。

let someFunction param1 param2 =
    let result = myFunction1 param1
                     param2
    result * 100

因此,第一个示例中的缩进有助于 F# 编译器正确解析您的示例。

F# 是一种对空格敏感的语言,这两个示例在技术上是否存在差异?

没有。这里的两个代码片段含义相同;唯一的区别是可读性。我更喜欢第一个,因为我的眼睛不必走到最右边来阅读整个功能。

有时当一行太长时,您可以使用管道重新排序参数并将该行分成多个:

myList
|> List.filter (fun x -> x % 3 = 0)
|> List.map (fun x -> x + 5)

更新:

我花了一些时间来汇总来自不同来源的信息,并编写了F# 格式化约定的综合指南;你可能想调查一下。

于 2013-02-10T21:26:56.007 回答