F#:将元组包装成多行

时间:2019-02-27 05:22:45

标签: f# visual-studio-code ionide

假设我有一个简单的Tree

type Tree =
    | BinaryNode of Tree * int * Tree
    | Tip 

    member this.Sum =
        match this with
        | Tip -> 0
        | BinaryNode(left, value, right) -> left.Sum + value + right.Sum

我用:

定义了一棵树
let tree = BinaryNode( BinaryNode( Tip, 2, Tip ), 1, BinaryNode( Tip, 3, Tip ))

但是我认为如果我们有一棵有多个节点的树,那真的很难读。所以我将其包装成多行,如下所示:

[<EntryPoint>]
let main argv =

    let tree = 
        BinaryNode( 
            BinaryNode( Tip, 2, Tip ), 
            1, 
            BinaryNode( Tip, 3, Tip )
        )

    printf "%A" (tree.Sum)

    0

以上代码在Visual Studio中可以正常工作。但是,当我将Visual Studio CodeIonide一起使用时,它会提醒我:

  

Lint:元组实例化中的逗号后应加一个空格。

enter image description here

我的问题:

  1. 我很困惑。将元组包装成多行是否不好?
  2. 如果没有,如何关闭棉绒?
  3. 如果答案是肯定的,那么当我们有十个节点时如何提高可读性?

1 个答案:

答案 0 :(得分:4)

认为这样做不一定很糟糕。好吧,我希望不要,因为我一直都这样做。尤其是在这样的情况下,否则行可能会太宽以至于无法阅读。

据我所知,Ionide使用FSharpLint。根据{{​​3}},通过在项目文件夹中放置具有所需配置的名为Settings.FSharpLint的XML文件,可以在项目级别禁用单个警告。

我认为,就您而言,该文件应具有以下内容:

<?xml version="1.0" encoding="utf-8"?>
<FSharpLintSettings>
  <Analysers>
    <TupleCommaSpacing>
      <Enabled>false</Enabled>
    </TupleCommaSpacing>
  </Analysers>
</FSharpLintSettings>