我使用VS 2019中的模板创建了一个F#'Nunit'项目来进行一些测试,它创建的默认fixture代码如下:
namespace Tests
open NUnit.Framework
[]
type TestClass () =
[]
member this.Setup () =
()
[]
member this.Test1 () =
Assert.Pass()
除了对班级宣言的好奇之外,这是一个看起来很普通的班级.我希望看到[
,但我看到[
,与自动生成的类型相同.我怀疑这是项目模板中的一个错误,但奇怪的是,F#很乐意编译它,并注意它可能与其他.Net语言不兼容:
warning FS3242: This type does not inherit Attribute, it will not work correctly with other .NET languages.
晶莹剔透.我的问题是,为什么F#甚至允许这样做?.Net中的反射功能是否适用于F#中的这种属性?可能的用例是什么?
从历史上看,忘记将检查添加到编译器中.当它被发现时,我建议将其编译错误,但最终会出现向后兼容原因的警告.有关详细信息,请参阅https://github.com/Microsoft/visualfsharp/pull/5192和https://github.com/Microsoft/visualfsharp/pull/5610.