D.5. グローバルオブジェクトシンボル

grid.hヘッダファイルには、以下のような宣言も含まれます。

id <Symbol>  North, East, South, West;

Symbol型、EventType型、Warning型、あるいはError型のグローバルid変数を宣言する行(プロトコルに従ってid変数のブラケット構文を使います)の処理は、deftype宣言のそれに多少似たところがあります。つまり、この宣言もdefobjが定義した特別なメッセージをサポートする、初期化されたグローバルなid変数を作成します。しかし、このグローバル変数を使用する目的は1つしかありません。それは、それらのグローバルなオブジェクト名を通じて参照されるある固定的な機能を定義することです。他のメッセージインターフェイスを定義したり、実装することが目的なのではありません。

この例のようにSymbolとして宣言された場合、生成されるオブジェクトにはその名前の文字列があるだけで、それ自身の振る舞いはありません。ユニークなグローバルid定数を定義するのに役立つだけです。id定数は複数のメッセージの中で異なった名前を持つ値として利用できます。この例にあるGridTurtleオブジェクトの現在の方向は、シンボル名North、East、South、Westのどれかで表されます。これらの値は完全なObjective Cオブジェクトとして定義され、さらなる制限を伴って使用できることを除けば、C言語のenum定数に似ています。EventType、Warning、Errorは、defobjが記述するさらに特殊化されたメッセージを持つSymbol定数のサブタイプを定義します。