F# 3.0 中的重大更改
本主题介绍中断在 F# 编译器和 Visual Studio 2012 发布的语言的 3.0 版本中更改。
重大更改的列表
下表列出在 F# 3.0 中的重大更改。
重大更改区域 |
描述 |
---|---|
缩进 |
早期版本的 F# 编译器错误接受的某些不正确缩进会在当前版本中生成编译错误。 有关缩进规则的完整说明,请参见 代码格式设置准则 (F#)。 |
为局部变量的引用、方法和结构属性。 |
现在,在结构是局部变量时,在引用中调用该结构的属性或方法是一种错误的做法。 此行为在先前的 F# 版本中是允许的。
若要解决此需求,请创建局部变量的副本,如以下示例所示:
|
不正确的 null 的相等性 |
在早期版本中,无论空值是否是正确的或不正确的类型值,均可使用 = 运算符来对其进行比较。 正确的 null 是由类型允许的 null 值;不正确的 null 不是类型的有效值。 尝试使用 = 运算符来比较不当 null(如下代码显示)时,当前行为将引发 NullReferenceException。
|
注释和字符串 |
在早期版本中,三重引号字符串中的结束注释标记 *(使用 """ 的字符串)作为字符串的一部分而分析。 在当前版本中,该标记将作为结束注释字符而分析。 因此,下面的代码,以前接受,将导致在当前版本的错误:
有关更多信息,请参见字符串 (F#)。 |
具有不同的 getter 和 setter 类型的属性。 |
在 F# 的早期版本中,F# 编译器无法正确允许 getter 和 setter 的方法具有不匹配的类型(例如,int 类型的 getter 和字符串类型的 setter)。 在 F# 3.0 中,编译器将报告如此声明为错误。 |