構造体の拡張とは異なり、 継承は頻繁に行われます。 これは、フィールド名命名規則の問題をさらに悪化させます(see Structure Naming Convention): フィールドが最初にどのクラスで定義されたかを常に覚えておく必要があります。 クラス構造の一部を変更すると、 影響を受けないコードの名前も変更する必要があります。
この問題を解決するために、 著者は(著者のオリジナルのモデルにはなかった)スコープ・メカニズムを追加しました。 inst-var
(または
inst-value
)で定義されたフィールドは、 それが定義されているクラスと、 そのクラスの子孫のクラスでのみ可視です。
このようなフィールドの使用は、 いずれにしても、 これらのクラスの m:
で定義されたメソッドでのみ意味があります。
このスコープ・メカニズムにより、 名前が無関係なワードと衝突する可能性が大幅に低くなるため、 着飾っていないフィールド名を使用できます。
スコープ・メカニズムがあれば、 他のワードの可視性を制御するために使用することもできます。 protected
の後に定義されたすべてのワードは、 現在のクラスとその子孫でのみ表示されます。 public
は、 以前に有効だった the
current wordlist (新しく定義されたワードを入れるワードリスト)(つまり ユーザー変数 current
)を復元します。
public
または set-current
が介在せずに複数の protected
がある場合、
public
はこれらの最初の protected
より前の有効な the current wordlist を復元します。