항목 액세스
Q#은 배열 항목 및 사용자 정의 형식의 항목에 대한 항목 액세스를 지원합니다. 두 경우 모두에서 액세스는 읽기 전용입니다. 즉, 복사 및 업데이트 식을 사용하여 새 인스턴스를 만들지 않고는 값을 변경할 수 없습니다.
배열 항목 액세스 및 배열 조각화
배열 식과 Int
또는 Range
형식의 식이 지정되면 [
및 ]
로 구성된 배열 항목 액세스 연산자를 사용하여 새 식을 구성할 수 있습니다.
대괄호 안의 식이 Int
형식이면 새 식에서 해당 인덱스의 배열 항목을 포함합니다.
예를 들어 arr
이 Double[]
형식이고 5개 이상의 항목을 포함하는 경우 arr[4]
는 Double
형식의 식입니다.
대괄호 안의 식이 Range
형식이면 새 식에서 지정된 Range
를 통해 인덱싱된 모든 항목의 배열을 포함합니다.
Range
가 비어 있으면 결과 배열도 비어 있습니다.
예를 들면 다음과 같습니다.
let arr = [10, 11, 36, 49];
let ten = arr[0]; // contains the value 10
let odds = arr[1..2..4]; // contains the value [11, 49]
let reverse = arr[...-1...]; // contains the value [49, 36, 11, 10]
편의상 예제의 마지막 줄에서 범위의 시작과 끝 값이 생략되었습니다. 자세한 내용은 컨텍스트 식을 참조하세요.
배열 식이 단순 식별자가 아닌 경우 항목이나 조각을 추출하려면 괄호로 묶어야 합니다.
예를 들어, arr1
및 arr2
가 모두 정수 배열인 경우 연결 항목은 (arr1 + arr2)[13]
으로 표현됩니다. 자세한 내용은 우선 순위 및 연관성을 참조하세요.
Q#의 모든 배열은 0부터 시작합니다. 즉, arr
배열의 첫 번째 요소는 항상 arr[0]
입니다.
조각화에 사용되는 인덱스 또는 인덱스 중 하나가 배열의 범위를 벗어나면(예: 0보다 작거나 배열의 길이보다 크거나 같은 경우) 런타임에 예외가 throw됩니다.
사용자 정의 형식에 대한 항목 액세스
(하나 이상의 명명된 항목 또는 익명 항목이 포함된 사용자 지정 형식을 정의하는 방법에 대한 자세한 내용은 형식 선언을 참조하세요.)
포함된 항목은 작업 또는 함수 구현의 일부로 사용할 수 있는 다음 문에 설명된 이름 또는 분해를 통해 액세스할 수 있습니다.
let complex = Complex(1., 0.); // create a value of type Complex
let (re, _) = complex!; // item access via deconstruction
let im = complex::Imaginary; // item access via name
항목 액세스 연산자(::
)는 다음 예와 같이 명명된 항목을 검색합니다.
newtype TwoStrings = (str1 : String, str2 : String);
operation LinkTwoStrings(str : TwoStrings) : String {
let s1 = str::str1;
let s2 = str::str2;
return s1 + s2;
}
명명된 항목은 이름으로 또는 분해를 통해 액세스할 수 있지만 익명 항목은 후자만 액세스할 수 있습니다. 분해는 포함된 모든 항목을 사용하므로 형식이 정의된 컴파일 단위 외부에서 이러한 항목에 액세스해야 하는 경우 익명 항목을 사용하지 않는 것이 좋습니다.
분해를 통한 액세스는 래핑 해제 연산자(!
)를 사용합니다. 래핑 해제 연산자는 포함된 모든 항목의 튜플을 반환합니다. 여기서 튜플의 셰이프는 선언에 정의된 것과 일치하고, 단일 항목 튜플은 항목 자체와 동일합니다(이 섹션 참조).
예를 들어 다음과 같이 정의된 Nested
형식의 nested
값이 있습니다.
newtype Nested = (Double, (ItemName : Int, String));
식 nested!
는 (Double, (Int, String))
형식의 값을 반환합니다.
!
연산자는 두 항목 액세스 연산자보다 우선 순위가 낮지만 다른 연산자보다는 우선 순위가 높습니다. 전체 우선 순위 목록은 우선 순위 및 연관성을 참조하세요.