私はF#の初心者であり、(おそらく単純な)質問があります。
以下のコードの目的は、シーケンス(バイトストリーム)から配列に値をコピーし、配列myarray_
のサイズを維持し、thesize
他の要素をゼロに設定することです。
forループでコピーされている値を確認できます。しかし、コンストラクターを離れた後、デバッガーはmyarray_
、新しく構築されたオブジェクトのすべてにゼロが含まれていることを示します。
VS2012を使用しています。ありがとう。
編集:受信者配列のサイズは、常に着信シーケンスのサイズよりも大きくなります。
編集:このSomeClassのオブジェクトは、実際には外部クラスのメンバーとしてインスタンス化されます。これが、「SomeClass」のコンテキストとともにです。メインプログラムがOuterClass.Funcを呼び出すと、「cp」オブジェクトが作成され、配列が適切に設定されます。コードがコンストラクターを離れるとき、配列にはすべてゼロが含まれるか、サイズがゼロになります(以下のコメントを参照)。
**解決しましたか?**:「cp」を「member」から「letmutable」に変更しました...現在は機能しているようです。理由がわからない。
type SomeClass(thesize, bytestream : seq<byte>) = class
let mutable myarray_ = Array.create<byte> thesize 0uy
do
let mutable idx = 0
for v in bytestream do
myarray_.[idx] <- v
idx <- idx + 1
member x.Func(index) = // consumes myarray_.[index] and neighbor values
type OuterClass(thesize, bytestream) = class
member x.cp : SomeClass = new SomeClass(thesize, bytestream)
member x.Func(index) =
x.cp.Func(index)