这是this proposal的后续问题。
显然,F#Core库源有一个标志,允许将2元组编译为结构。见here。我做了以下事情:
TUPLE_STRUXT
和FSharp.Core.fsproj
添加了一个定义FSharp.Compiler.fsproj
标记。build.bat
。C:\Program Files (x86)\Microsoft SDKs\F#\3.1\Framework\v4.0
和C:\Program Files (x86)\Reference Assemblies\Microsoft\FSharp\.NETFramework\v4.0\4.3.1.0
的内容替换为适当的内置文件。我的项目编译并引用了正确的(新建的)FSharp.Core.dll
。但是,2元组仍然被编译为类。
我做错了吗?或者这个代码分支实际上是不相关的?事件是将元组编译为System.Tuple而不是在此代码中声明的类型(是否设置了TUPLE_STRUXT
标志)这一事实将指示后者。有没有办法让它发挥作用?
编辑:在设置标志FX_NO_TUPLE
之后,源代码无法编译。我无法解决的错误是prim-types.fs <527,7>: error FS0039: The type 'Struct' is not defined
。也就是说,违规行是struct tuple定义中的第一个:
[<Struct>]
type Tuple<'T1,'T2> =
new (v1,v2) = { Item1 = v1; Item2 = v2 }
val Item1 : 'T1
val Item2 : 'T2
有谁知道是什么原因引起的?