このブログはLazarus(FreePascal)アドベントカレンダー22日目の記事です。
22日目はユニットファイルの循環参照について。
ほかの言語と同様、usesでお互いのユニットを参照したプログラムを作ると、循環参照が発生します。
お互いのユニットでお互いのユニットのメソッドを使うから、循環参照と言われてもなあ となることはたまにあるかと思います。
Pythonなどの場合、たとえばどちらかのimport
文をファイルの先頭ではなく実際にクラスやメソッドを使う直前に書くことで循環参照を回避する なんてことも可能ですがPascalの場合uses
句が書ける場所は限定されています。その場合どうするか。
implementation句に書く
その場合uses
句をimplementation
句に書くことで、循環参照を回避することができます。
Pascalのuses
句はinterface
句に書かれていることが一般的なので一見してそちらにしか書けないかと思ってしまいがちですが、別にimplemnentation
句に書いても良いようです。
なので、どちらかのユニットからの参照をそちらに移すことで、循環参照を回避できます。