Разница в определении списка в fsharp - PullRequest
1 голос
/ 28 февраля 2012

Это работает нормально

let staticParams = [ProvidedStaticParameter("filename", typeof<string>)
                    ProvidedStaticParameter("forcestring", typeof<bool>, false)]

но это не

let filename3 = ProvidedStaticParameter("filename", typeof<string>)
let forcestring = ProvidedStaticParameter("forcestring", typeof<bool>, false)

let staticParams = [filename3 
                   forcestring]

Какая разница? Тогда, если я наберу это, он будет правильно распознан снова

let filename3 = ProvidedStaticParameter("filename", typeof<string>)
let forcestring = ProvidedStaticParameter("forcestring", typeof<bool>, false)

let staticParams = [filename3 ;
                   forcestring]

Ответы [ 2 ]

2 голосов
/ 28 февраля 2012

В F # отступ имеет значение.Например:

let staticParams = [filename3
                    forcestring]

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

Однако в следующем случае:

let staticParams = [filename3 
                   forcestring]
//                 ^
//                 Notice different indentation here.

два значенияанализируются как применение функции от filename3 до forcestring и, следовательно, об ошибке.

Поскольку ; является разделителем списка, в вашем последнем примере F # parser ожидает другой элемент списка в следующей строке.Поэтому там нет проблем с неправильным отступом.

2 голосов
/ 28 февраля 2012

; - архаичный синтаксис (от ML).Нет смысла использовать его, если вы не набираете несколько элементов в одной строке (например, [ 1; 2 ]).Также в записях вам не нужно ставить ; между полями.

Второй код не компилируется, потому что все элементы должны иметь одинаковый уровень отступа:

let staticParams = [filename3 
                    forcestring]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...