【问题标题】:F# : wrap tuples into multiple linesF#:将元组包装成多行
【发布时间】:2019-02-27 05:22:44
【问题描述】:

假设我有一个简单的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:元组实例化中的逗号后面应该跟一个空格。

我的问题:

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

【问题讨论】:

  • 由于这是唯一的应该提示,我会说忽略它,但是能够在突出显示时禁用此特定建议可能会很有用。你在 VS 的 F# 交互中试过吗?也许这个问题更多是关于在各种产品中的一致突出,而不是实际的“最佳实践”问题。
  • @MarkusDeibel 这是否意味着可以以这种方式换行成多行?我之所以问这个问题是因为我在网上遇到了一个问题,即 OP 使用了缩进和{},这不被视为最佳实践,然后遇到了意外错误。作为一个新手,F# 中的缩进和空格让我很困惑。
  • [更新]:似乎今天运行相同的代码没有任何不必要的“建议”(Ionide(v3.37.0)

标签: f# visual-studio-code ionide


【解决方案1】:

它认为这样做不一定是坏事。好吧,我希望不会,因为我一直这样做。尤其是在这种情况下,否则线条会太宽,阅读起来不愉快。

据我所知,Ionide 使用 FSharpLint。根据the docs,可以在项目级别禁用个别警告,方法是在项目文件夹中放置一个名为Settings.FSharpLint 的XML 文件,并使用所需的配置。

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

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

【讨论】:

  • 您好,感谢您的回答:有没有办法仅在本地级别禁用 Lint?例如,如果我可以确保它是安全的,有没有办法让它只对某些线路关闭?类似#safe{ .... }? .我认为这比在项目级别禁用 Lint 更好
  • 这可能使用SuppressMessage 属性,但我不完全确定哪个粒度。在此处查看文档页面:fsprojects.github.io/FSharpLint
  • 但如果我在let tree = ... 上添加[&lt;SuppressMessage&gt;],它会抱怨Unexpected symbol '[&lt;' in binding
  • 这就是我害怕的。也许您需要将属性添加到最外层的绑定 - 在您的情况下是 main 函数。
  • 如果你只是添加[&lt;SuppressMessage&gt;],那么是的,我想是的。但正如文档中所述,您应该能够执行 [&lt;SuppressMessage("Formatting","TupleCommaSpacing")&gt;],以仅抑制所需的警告
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多