Различное форматирование аргументов для определений и вызовов

Мне любопытно, почему аргументы основного конструктора должны иметь отступ за открывающей скобкой в ​​определении типа, но при вызове могут иметь отступ с именем типа.

type AnIncrediblyLaboriouslyEternallyLongTypeName(arg1, arg2,
      arg3, arg4) = //WARNING: Possible incorrect indentation
  class end

let x = AnIncrediblyLaboriouslyEternallyLongTypeName(
          1, 2, 3, 4) //works

Решение состоит в том, чтобы отступить аргументы за левый край вашего второго монитора:

type AnIncrediblyLaboriouslyEternallyLongTypeName(arg1, arg2,
                                                  arg3, arg4) = 
  class end

Мне интересно, почему правила различаются в этих двух сценариях.

Это относится и к методам. Я просто выбрал первичные конструкторы в качестве примера.


person Daniel    schedule 15.09.2011    source источник


Ответы (1)


Я не помню, но обратите внимание, что это

type AnIncrediblyLaboriouslyEternallyLongTypeName
        (arg1, arg2, arg3, arg4) = // works
  class end 

также допускается.

person Brian    schedule 15.09.2011
comment
Я до сих пор не могу понять, почему не работает форматирование кода C#. :-) - person Daniel; 15.09.2011
comment
Вероятно, это не работает, потому что парсер компилятора не обрабатывает такие случаи :). В этом случае кажется, что '(' создает новый блок, и если ')' не находится на том же уровне, то это не работает. - person Ankur; 16.09.2011