メインコンテンツまでスキップ

REF — 参照の診断

境界は空間のパスで相手を名指す。名指した先が存在しなければ、関係は成り立たない。REF はその一つだけの族である。

コードseverity一文
REF01error未定義の空間を参照しています

コードの手に入れ方は診断を読むにある。

REF01 — 未定義の空間を参照しています

error

grid X 0 3600 7200
grid Y 0 4000
level L1 0 h:2400 slab:150
space /L1/a room X1..X2 Y1..Y2
boundary /L1/a /L1/zzz

References an undefined space: /L1/zzz

原因boundary に書いたパスに対応する space が無い。原因は三つのどれかである。

  1. パスの綴り違い。/L1/bed/L1/bedroom のような取り違え。
  2. space の書き忘れ。境界だけ先に書いて、空間を書いていない。
  3. 合成でそのレイヤーが読まれていない。別ファイルにあるはずの空間が、import の抜けで入ってきていない。

直し方 — まずパスの綴りを確かめる。別ファイルにあるはずの空間なら、base 層に import があるかを見る。koyu check <entry> --json が返す file合成に参加したレイヤーを指すので、意図したレイヤーが実際に読まれているかはそこで分かる。

注 — 順序の問題ではない。boundary は空間より前に書いてよい。境界は前方参照できるので、前後を入れ替えても直らない。前方参照できないのは gridlevel の二つで、こちらは使用より前に宣言しないと効かない。

注 — 診断は両側のパスを持つ。path には ["/L1/a", "/L1/zzz"] のように境界の両端が入る。存在するほうも入っているのは、どの境界の話かを言うためである。両端とも未定義なら、一本の境界に対して REF01 が二件出る。

注 — 未定義の参照があると、その境界の形の検査には進まない。線分の導出も開口の配置も、相手の空間が無ければ意味を持たないからである。REF01 を直すと、隠れていた BNDOPN の診断が現れることがある。