型宣言
Q# では、ユーザー定義の struct
型がサポートされています。
struct
型は F# のレコード型に似ています。これらは不変ですが、のコピーと更新の コンストラクトをサポートします。
構造体の型
struct
型には名前付きアイテムのみを含めることができますが、匿名アイテムはサポートされません。 名前付き項目の組み合わせはサポートされていますが、項目を入れ子にすることはできません。
たとえば、次の宣言では、2 つの名前付き項目 Real
と Imaginary
を持つ構造体 Complex
を定義 Double
。
struct Complex {
Real : Double,
Imaginary : Double,
}
含まれている項目には、名前または分解
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 };