在新的缩进线和同一条线上放置第二个参数之间是否存在技术差异?

时间:2013-02-10 21:12:04

标签: f#

考虑以下两个例子:

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#是一种白空间敏感语言,这两个例子在技术上有区别吗?

1 个答案:

答案 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;你可能想看看它。