형식 선언
Q# 사용자 정의 struct
형식을 지원합니다.
struct
형식은 F#의 레코드 형식과 비슷합니다. 변경할 수 없지만 복사 및 업데이트 구문을 지원합니다.
구조체 형식
struct
형식은 명명된 항목만 포함할 수 있으며 익명 항목을 지원하지 않습니다. 명명된 항목의 조합은 지원되지만 항목은 중첩할 수 없습니다.
예를 들어 다음 선언은 두 개의 명명된 항목이 Real
Imaginary
있는 구조체 Complex
정의합니다. 두 가지 형식은 모두 Double
.
struct Complex {
Real : Double,
Imaginary : Double,
}
포함된 항목은 해당 이름 또는 분해 액세스할 수 있습니다(자세한 내용은 항목 액세스참조). 래프 해제 연산자통해 셰이프가 선언에 정의된 항목과 일치하는 모든 항목의 튜플에 액세스할 수도 있습니다.
struct
형식은 두 가지 이유로 유용합니다. 첫째, 정의된 형식을 사용하는 라이브러리와 프로그램이 분해가 아닌 이름을 통해 항목에 액세스하는 한, 라이브러리 코드를 중단하지 않고 나중에 추가 항목을 포함하도록 형식을 확장할 수 있습니다. 따라서 일반적으로 분해를 통해 항목에 액세스하지 않는 것이 좋습니다.
둘째, Q# 항목 형식이 동일하더라도 두 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 };