パッケージというものをどう使うべきか、良くわからないまま使っていたので、 ML からそれらしいところを探して、(私が、特に疑問に思っていたあたりを)少しだけ拾ってみた。
とりあえず,リファレンスをしっかり読まないと。 →
パッケージ
それから,ここも。 →
Hiroi さんち
[xyzzy:01997](Tetsuya Kamei さん)より。
| ≫Q1. では、全部のシンボルを user パッケージに入れてしまってはダメなのでしょう | ≫か。 | | 良いと思います。 | むしろそうするべきだと思うのですが。(私は) 駄目とは言いませんが、そうすべきとも思いません(^^; まあ、好きな やり方でいいのではないでしょうか。一般的な各モードのように、ほ とんどのシンボルを公開するような場合はパッケージを使う意味はほ とんどないでしょう。逆に、compile とか cmuloop のようなほとんど が内部関数の場合は使った方が便利なのではないかと思います。 | ≫Q2. Q1がよくないとすると、その理由はシンボル名の重複する危険性が大きいからで | ≫しょうか。 そもそもパッケージシステムが考えられたのはその理由からです。 | C++です | | たぶん。----> 亀井さん ですます。 | 恥かしながら、わたしの頭の中では、モジュールとパッケージという2つの概念が | ごっちゃになっているようです。 | 正直いって、両者のちがいがよくわかりません。 本来の考え方では、 モジュール: *.c など パッケージ: *.exe、*.dll など に相当すると思います(たぶん)。Lisp システムという OS 上で全部の プログラムが同じ名前空間を使ったら、そりゃ重複もするっちゅうねん。 するってーと、xyzzy 程度の規模ではパッケージなんざ必要ないとも 言えますね(^^;
[xyzzy:06778](KAMEI Tetsuya さん)より。
| 2.他の方がお作りになられたプログラムを見てて思ったのですけど、個人的に | 作成したマクロプログラムを公開しようとする場合、変数名や関数名はパッケー | ジに登録するのが好ましいのでしょうか 登録されないようにしない限りは、必ずどこかのパッケージ に登録されます。パッケージシステムは、他のものと名前が 重複しないようにするための仕組みなので、ユニークになり そうなプレフィックスをつけたりすれば、あまり気にする必 要はありません。
[xyzzy:06796](KAMEI Tetsuya さん)より。
| 引っかかってるのが、自作マクロをeditorパッケージに登録していいのかな、 | ということなんです editor パッケージからの export は、なるべくしない方が 無難でしょう。ユーザから見れば、普通に何もしていない状 態(user パッケージが使われる)と同じなので。 数個の関数で完結するようなものであれば user パッケージ を使用して、それなりの規模で内部関数が多くあるような場 合には、独自のパッケージを使用すればいいのではないでし ょうか。 | exportしたシンボルについては早い物勝ちで、後から名前がかぶるシンボルを | 登録しようとした場合、エラーではじかれて登録されるのは防げるのでしょう | が、internalなものについては後から登録した物で上書きされてしまうのです | よね? うーん、微妙に違うような気がしたり…。
[xyzzy:01896](Masahito Henmi さん)より。
ed (editor)パッケージにあれば、EmacsLispやMuleに由来するlisp関数で lispパッケージにあれば、common-lispという規格書にのっているlisp関数に 由来するというやつです。 (CLtLとかってココで、よく見かけるでしょ。) Common Lisp the Languageとかいう規格書
[xyzzy:08552](YAMAMOTO Taizo さん)より。
■ Question
(setq *grep-directory-name-hook* #'(lambda () (car ed::*grep-directory-history*))) (define-key *global-keymap* #\M-f 'grep-dialog ) しかし 「名前が衝突するため、exportできません:editer-grep-directory-name-hook*」 という表示が出力されます。 これなどは何が問題でこのように表示がなされるのでしょうか?
■ Answer
(setq ...)した段階では、*grep-directory-name-hook*というシンボル がuserパッケージの中に登録されます。この後でgrep-dialogを使う段 階でgrepd.lを読み込みます。このときにeditorパッケージのシンボル *grep-directory-name-hook*を他のパッケージから見えるようにexport するのですが、それがuserパッケージのシンボルと重複してるので、 「重複してるからexportはできんよ」と怒られます。 .xyzzyやsiteinit.lにいろいろ書いておくと自分も知らないライブラリ が読み込まれてて、結果的にうまく動いてることがあるので、調べるの が大変ですよね