public readonly
F#を使用してC#アセンブリで定義された構造体型のメンバーを読み取ると、奇妙なエラーが発生します。
// C#: compile to Lib.dll
namespace Lib
{
public class MyClass { public readonly int ReadonlyFoo; }
public struct MyStruct
{
public readonly int ReadonlyFoo;
public int WriteableFoo;
}
}
// F#: compile to Client.exe
open Lib
let myClass = new MyClass()
printfn "MyClass.ReadonlyFoo = %x" myClass.ReadonlyFoo
let myStruct = new MyStruct()
printfn "MyStruct.WriteableFoo = %x" myStruct.WriteableFoo
printfn "MyStruct.ReadonlyFoo = %x" myStruct.ReadonlyFoo
Client.exeをF#1.9.6.16でコンパイルすると、最後の行に次のエラーが表示されます。
"The address of the variable 'copyOfStruct' may not be used at this point"
この記事の執筆時点では、Webは役に立たない。クラスの不変のメンバーを読み取ることができ、構造体の可変のメンバーを読み取ることができるのに、構造体の不変のメンバーを読み取ることができないのは奇妙に思えます。回避策は簡単ですが、興味があります。これはコンパイラのバグですか?
編集:バグレポートをfsbugs@microsoft.comに送信しました