请考虑以下两个示例:
let myList = [0..10]
List.map (fun x -> x + 5)
(List.filter (fun x -> x % 3 = 0) myList)
Run Code Online (Sandbox Code Playgroud)
和
let myList = [0..10]
List.map (fun x -> x + 5) (List.filter (fun x -> x % 3 = 0) myList)
Run Code Online (Sandbox Code Playgroud)
两个示例都产生相同的结果:
val myList : int list = [0; 1; 2; 3; 4; 5; 6; 7; 8; 9; 10]
val it : int list = [5; 8; 11; 14]
Run Code Online (Sandbox Code Playgroud)
F#是一种白空间敏感语言,这两个例子在技术上有区别吗?
我认为F#代码格式指南对您非常有帮助,尤其是关于缩进的一般规则的第一部分.
以下是该页面的相关摘录:
当您断开长行时,行的延续必须缩进到比封闭构造更远的位置.例如,函数参数必须缩进得比函数名的第一个字符更远,如下面的代码所示.
let someFunction param1 param2 =
let result = myFunction1 param1
param2
result * 100
Run Code Online (Sandbox Code Playgroud)
因此第一个示例中的缩进有助于F#编译器正确解析您的示例.
F#是一种白空间敏感语言,这两个例子在技术上有区别吗?
不.这里有两个代码片段具有相同的含义; 唯一的区别是可读性.我更喜欢第一个,因为我的眼睛不必去最右边阅读整个功能.
有时当一行太长时,你可以使用管道重新排序参数并将该行分成多行:
myList
|> List.filter (fun x -> x % 3 = 0)
|> List.map (fun x -> x + 5)
Run Code Online (Sandbox Code Playgroud)
更新:
我花了一些时间来汇总来自不同来源的信息,并编写了一份F#格式化约定的综合指南 ; 你可能想看看它.