Function PROVIDE, REQUIRE

UP


Function PROVIDE, REQUIRE

Function PROVIDE, REQUIRE

構文

provide module-name => implementation-dependent
require module-name &optional pathname-list => implementation-dependent

引数と戻り値

module-name - 文字列指定子
pathname-list - nilか、 パス名指定子の空ではないリスト。 デフォルトはnil

定義

provide*modules*が保有しているリストに、 そのような名前がまだ存在していないときに module-nameをそのリストに追加します。

require*modules*が保有するリスト内に module-nameが現れているかテストします。 もし現れているとき、requireは即座に返却します。 それ以外のとき、 次に示すようにファイルの集合を適切にロードするよう試みます。 pathname-listの引数について、 nilではなくパス名のリストを指定しているとき、 左から右の順番でロードを行います。 もしpathname-listnilのとき、 実装依存の仕組みにより module-nameという名前のモジュールを ロードするような仕組みが起動されます。 もしそのようなモジュールがロードできなかったとき、 型errorのエラーが通知されます。

両関数は、module-nameの存在をテストするときに string=を使用します。

例文

;;; これは移植不可能なREQUIREの使い方を示しています。
;;; なぜなら実装依存のファイルロードメカニズムだからです。

(require "CALCULUS")

;;; これはリテラルな物理パス名のため
;;; 移植不可能なREQUIREの使い方です。

(require "CALCULUS" "/usr/lib/lisp/calculus")

;;; 移植可能な使い方のフォームとして論理パス名を指定しており、
;;; どこかで適用可能な変換が定義されているものとします。

(require "CALCULUS" "lib:calculus")

;;; 他の移植可能な使い方のフォームとして変数か
;;; テーブルの検索関数によるパス名の決定が挙げられます。
;;; これもまたどこかで初期化する必要があります。

(require "CALCULUS" *calculus-module-pathname*)

副作用

provide*modules*を変更します。

影響

requireによって取られる特定の行動は、 provideの呼び出しによって (または一般的に*modules*の値の変更によって) 影響します。

例外

module-nameが文字列指定子ではなかったとき、 型type-errorのエラーが通知されるべきです。

もしrequireが ファイルシステムとの相互処理をしている間に 要求された処理に問題が生じて失敗したとき、 型file-errorのエラーが通知されます。

もしpathname-listの何かのパス名が ワイルドカードのパス名を指定した指定子であったとき、 型file-errorのエラーが通知されるかもしれません。

参考

*modules*, 19.1.2. ファイル名としてのパス名

備考

関数providerequireは非推奨です。

もしモジュールがひとつのパッケージに含まれているとき、 慣習的にはパッケージとモジュールの名前は同じになります。


TOP, Github