2009-09-02 14 views
6

F#を使用してC#アセンブリで定義された構造体タイプのpublic readonlyメンバを読み込むと、異常なエラーが発生します。外部アセンブリ内の構造体のpublic readonlyメンバーへのアクセス

// 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 

私はF#1.9.6.16でCLIENT.EXEをコンパイルすると、最後の行はエラーを与える:

"The address of the variable 'copyOfStruct' may not be used at this point" 

ウェブは、この記事の執筆時点のようuselessです。クラスの不変なメンバを読むことができ、structの可変メンバを読むことができますが、structの不変なメンバを読むことはできません。回避策は簡単ですが、私は不思議です:これはコンパイラのバグですか?

編集:私は、人々は「私は私が何かわからない」のコードである「それはコンパイラのバグのように見える」と言ったときに通常

+0

これは唯一の結果だから、あなたの役に立たないリンクが作成され、無限ループになりました。 – MichaelGG

答えて

3

[email protected]するバグレポートを提出私はやっている。しかし、この状況では、バグのように見えます。

F#コンパイラは、構造体が変更された場合の裏側で構造体のコピーを作成します。 (これは、変更可能なフィールドを持つ構造体を定義しても、そのフィールドを更新する前にその構造体のインスタンスを変更可能とする必要があります)。インターネットとのStackOverflowは、F#が問題 - 関連について助けを求めるには絶好の場所ですが

は、F#チームは[email protected]電子メールで送信することにより、あなたが見つけたバグについて知らせてください。

+0

ありがとう、ええ、私はちょうどどこかで愚かな間違いをしていたかどうかはわかりませんでした。バグ報告が提出されました。 – Gabriel

関連する問題