F #: обернуть кортежи в несколько строк - PullRequest
0 голосов
/ 27 февраля 2019

Допустим, у меня есть простое 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 Code с Ionide, это напоминает мне, что:

Lint: за запятой в экземпляре кортежа должен следовать один пробел.

enter image description here

Мой вопрос:

  1. Я в замешательстве.Плохо ли оборачивать кортежи в несколько строк?
  2. Если нет, то как замкнуть ворс?
  3. Если ответ Да, как улучшить читаемость, когда у нас десять узлов?

1 Ответ

0 голосов
/ 27 февраля 2019

Не думаю, что это обязательно плохо.Ну, я надеюсь, что нет, так как я делаю это все время.Особенно в таких случаях, когда строка была бы слишком широкой, чтобы ее было удобно читать.

Насколько я могу судить, Ionide использует FSharpLint.Согласно документам , отдельные предупреждения можно отключить на уровне проекта, поместив файл XML с именем Settings.FSharpLint в папку проекта с требуемой конфигурацией.

Я думаю, что вВ вашем случае файл должен иметь следующее содержимое:

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