Критические изменения в F# версии 3.0
В этом разделе описываются критические изменения в версии 3.0 компилятора F# и языке для выпуска Visual Studio 2012.
Список критических изменений
В следующей таблице перечисляются критические изменения в F# 3.0.
Область критических изменений |
Описание |
---|---|
Отступ |
Некоторые неверные отступы, которые были ошибочно приняты предыдущими версиями компилятора F#, создают ошибку компиляции в текущей версии.Подробное описание правил отступа см. в разделе Рекомендации по форматированию кода (F#). |
Кавычки, методы и свойства структур, которые являются локальными переменными |
Вызов свойства или метода структуры в кавычках, если эта структура является локальной переменной, теперь является ошибкой.Предыдущие версии F# допускали такое поведение.
Чтобы избежать этого требования создайте копию локальной переменной, как показано в следующем примере:
|
Равенство с неверными значениями null |
В предыдущих версиях можно было бы сравнить значение null, используя оператор = независимо от того, является ли это значение верным или неверным для этого типа.Правильное значение null является значением null, которое допускает тип; неверное значение null не является допустимым значением для типа.На данный момент исключение NullReferenceException создается каждый раз, когда оператор = используется для сравнения неверных значений null, как показано в следующем коде.
|
Комментарии и строки |
В предыдущих версиях заключительный маркер комментария *) в строке в тройных кавычках (""") был трактован как часть строки.В текущей версии этот маркер анализируется как последний знак комментария.Поэтому следующий код, который ранее был принят, вызовет ошибку в текущей версии.
Для получения дополнительной информации см. Строки (F#). |
Свойства, которые имеют различные типы методов задания и присвоения. |
В более ранних версиях языка F# компилятор F# неверно позволял методам получения и задания иметь типы, которые не соответствуют (например, получения экспортированного типа int и метод присвоения строкового типа).В F# 3.0 компилятор сообщает о таком объявлении как об ошибке. |