다음을 통해 공유


형식 선언

Q# 사용자 정의 struct 형식을 지원합니다. struct 형식은 F#의 레코드 형식과 비슷합니다. 변경할 수 없지만 복사 및 업데이트 구문을 지원합니다.

구조체 형식

struct 형식은 명명된 항목만 포함할 수 있으며 익명 항목을 지원하지 않습니다. 명명된 항목의 조합은 지원되지만 항목은 중첩할 수 없습니다.

예를 들어 다음 선언은 두 개의 명명된 항목이 RealImaginary있는 구조체 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 };