次の方法で共有


型宣言

Q# では、ユーザー定義の struct 型がサポートされています。 struct 型は F# のレコード型に似ています。これらは不変ですが、のコピーと更新の コンストラクトをサポートします。

構造体の型

struct 型には名前付きアイテムのみを含めることができますが、匿名アイテムはサポートされません。 名前付き項目の組み合わせはサポートされていますが、項目を入れ子にすることはできません。

たとえば、次の宣言では、2 つの名前付き項目 RealImaginaryを持つ構造体 Complex を定義 Double

struct Complex {
    Real : Double,
    Imaginary : Double,
}

含まれている項目には、名前または分解 してアクセスできます (詳細については、項目アクセスを参照してください)。 また、unwrap 演算子を使用して、図形が宣言で定義されたものと一致するすべての項目のタプルにアクセスすることもできます。

struct 型は、2 つの理由で役立ちます。 まず、定義された型を使用するライブラリとプログラムが、分解ではなく名前を使用して項目にアクセスする限り、その型を拡張して、ライブラリ コードを中断することなく後で追加の項目を含めることができます。 このため、一般に、分解を介して項目にアクセスすることはお勧めしません。

2 つ目の Q# では、項目の種類が同一であっても、2 つの struct 型の値間に自動変換がないため、特定のデータ型に対する意図と期待を伝達できます。

構造体コンストラクター

新しい struct 型のコンストラクターは、struct 定義を読み取ると、コンパイラによって自動的に生成されます。 前の例の Complex 構造体の場合は、゚〘

let complexPair = Complex(1.4, 2.1);

インスタンスは、new キーワードを使用してユーザーが定義することもできます。例:

let complexPair = new Complex { Real = 1.4, Imaginary = 2.1 };

... 構文を使用して既存の構造体をコピーすることもできます

let copyPair = new Complex { ...complexPair };

コピー時に、変更する個々のフィールドを指定できます。

let updatedPair = new Complex { ...complexPair, Real = 3.5 };