名前の衝突の問題は、CLでは、the readerの振舞の問題となる。テキスト上の名前をsymbolsに変換するのは、the readerの役目。そのときに、同じ名前を同じsymbolにするか違うsymbolにするか、ということ。
How the Reader Uses Packages
メモ。
- packagesはそれぞれ名前を持つ。
- FIND-PACKAGEで、packagesの名前検索ができる。
- *PACKAGE*はa packageの名前をもち、それをthe current packageと呼ぶ。
- FIND-SYMBOLは、a name と a package nameを引数にとり、そのnameに対応したsymbolが存在する場合はそれを返し、存在しない場合はNILを返す。
- INTERNは、FIND-SYMBOLと似たようなものだが、存在しないときには、そのnameに対応したsymbolをそのpackageに生成する。
- プログラマが使用する名前のほとんどは、unqualified(無資格? 無修飾? 無制限?)である。具体的には、コロンをひとつも含んでいない。
- その場合、the readerが「テキストの a name を読む」とは、それのエスケープ文字を変換して、全体を大文字にして、INTERNに渡すということだ。
- コロンを含んでいる名前を a package-qualified name と呼ぶ。(修飾/制限だ)
- the readerは、a package-qualified name を読むと、それをコロンを区切りとして分解する。それぞれの部分をa package nameやa nameと解釈する。
- 1コロンは、an external symbolを指すものであり、externalであるということは、元packageがそれをexportsしているということ。存在しなかったり、externalでなかったりすると、the readerがエラーを上げる。
- 2連続コロンは、おお!強制介入。externalであるかにかかわらず、そのsymbolがそのpackageに存在するなら返却される。
- keyword symbolsとは、コロンから始まるもののこと。これらは、KEYWORDという名前のpackageにINTERNされて、自動的にexportされる。さらに、同時に、そのsymbolと同じ名前と値のa constant variableを定義する。
- uninterned symbolsは、頭に#:をつけたもの。どのpakageにもINTERNされない。それを読むたびにthe readerは異なるsymbolを生成する。
A Bit of Package and Symbol Vocabulary
メモ。
- FIND-SYMBOLを使ってあるpackageについて取得可能なsymbolsを、"accesible in that package"と言う。これは、対象としているpackageが current packageであるときに、unqualified nameで参照可能なものということ。
- この内訳は2つになる。
- ひとつは、the readerがそのpackageのname-to-symbolテーブルにinternしたもの。それは、"present in the package"と言う。
- もうひとつは、そのpackageが他のpackageのsymbolsをinheritsしたもの。inheritsするということは、"using the other package"と言う。ただし、the used package自身がexportsしているsymbolsだけがinheritsされる。このようにexportsには2つの効果がある。inheritsされるということと、package-qurlified names(コロン1つ型)で参照可能になるということ。
- このinheritanceにおいて名前衝突がおこった場合は、そのうちのひとつを a shdowing symbolにすることによって、name-to-symbolの対応を単一にして解消できる。
- useとは別にimportがある? (頭がクラクラしてきた。。。)
だめだ、概念を文章だけで説明されてもなんだかわからない。この後の節の例をみて理解しよう。 - a present symbolはuninternできる。uninterned symbolのPRINTは#:記法となる。
Three Standard Packages
Defining Your Own Packages
Packaging Reusable Libraries
特になし。
Importing Individual Names
importは個々のsymbolに対してなんですね。
Packaging Mechanics
Package Gotchas
特になし。
この章も楽しめました。
0 件のコメント:
コメントを投稿