본문으로 건너뛰기

배열 옵셔널리티 — 첫 원소가 배열 전체를 대표

문서 목록으로

배열 컬럼들이 필수 여부를 서로 다르게 적었을 때 무엇으로 읽는지의 설계입니다.


어느 컬럼이 정하는가는 그대로이고, 무엇을 정하는가가 바뀌었습니다. 원소가 없을 수 있는 배열에서 첫 컬럼의 ?원소가 없을 수 있다는 뜻입니다 — 접힌 그룹의 타입 칸은 원소 하나를 선언하므로, 그 표시도 원소의 것입니다. 배열 전체의 없음은 그 그룹에 표기가 없습니다. 아래의 「첫 원소가 전부를 대표한다」는 결론은 그대로입니다.

규칙

첫 원소의 표시가 배열 전체의 표시입니다. 타입과 같습니다.

Layer[0] Layer[1] Layer[2]
required 1 - -

Layer[0]·Layer[1]·Layer[2]같은 필드를 세 번 본 것입니다. 타입도 하나, 이름도 하나이고, 「값이 없는 로우가 있을 수 있는가」도 하나입니다 — 그리고 그 답은 첫 컬럼이 갖고 있습니다.

뒤 컬럼들의 표시는 아무 뜻도 없습니다. 엄밀히 하자면 첫 컬럼과 같게 적는 것이 깔끔하지만, 읽는 쪽에서는 보지 않으므로 고칠 것이 있는 시트가 아닙니다.

SerialField.Type이 이미 그렇게 합니다. 그룹의 타입은 Fields[0].Type이고, 원소마다 다른 타입을 적을 수 있는 것이 아닙니다. 필수 여부만 다르게 취급할 이유가 없습니다.

레코드 — 멤버 단위 판정

Slot[0]["Id"] Slot[0]["Count"] Slot[1]["Id"] Slot[1]["Count"]

IdCount서로 다른 컬럼이고 타입도 다릅니다. 그래서 필수 여부도 각자 정하고, Id의 답은 Slot[0]["Id"]가, Count의 답은 Slot[0]["Count"]가 갖습니다.

이 구별은 이 표기를 쓰는 시트가 필드에 붙는 표시오브젝트 안의 필드에 붙는 표시를 따로 두는 것과 같습니다.

경과 — 두 차례의 오독

기록해 둡니다. 같은 자리를 다시 지나갈 사람이 있기 때문입니다.

읽은 것왜 틀렸나
오류. 엇갈리면 통일하라고 요구시트는 틀린 말을 하고 있지 않았습니다. 통일하면 원래 뜻이 사라집니다
최소 길이. 「원소가 최소 N개」뒤 컬럼의 표시에 뜻이 있다고 가정한 것인데, 없습니다

두 번 다 시트에 적힌 것보다 많은 뜻을 읽으려 한 것이 원인이었습니다. 표기 규격 문서와 데이터를 직접 확인해서야 「첫 원소가 전부」라는 결론이 나왔습니다.

함께 고친 것 — 자르기가 스칼라 배열에도

자르기 옵션이 — 그때는 이름도 TrimTrailingRecordElements였습니다 — 레코드 배열에만 걸려 있었습니다. 실제 워크북에서 Layer[0..6] 중 넷만 채운 로우가 길이 7로 나왔고, 그쪽 익스포터는 4를 냅니다.

자르기는 「원소가 어디서 끝나는가」에 대한 답이고, 그 질문에 원소의 생김새는 상관이 없습니다. 가변 길이 레코드 배열이 정한 규칙 — 뒤에서만 자르고 가운데는 유지 — 은 그대로입니다.