考虑以下两个例子:
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#是一种白空间敏感语言,这两个例子在技术上有区别吗?
答案 0 :(得分: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)
<强>更新强>
我花了一些时间来汇总来自不同来源的信息并撰写了a comprehensive guide to F# Formatting Conventions;你可能想看看它。