1

ユーザー設定変数に応じて異なる Lisp ファイルをロードする設定可能な ASDF システムを作成する方法はありますか? できれば、必要な構成変数が指定されていない場合、読みやすいエラー メッセージが表示されてロード プロセスが失敗します。システムをロードするときに、そのような変数を便利に設定するにはどうすればよいでしょうか? (手動で、quicklisp を介して、または別のシステム定義ファイルから)

4

2 に答える 2

2

すぐに使えるわけではありませんが、それに似たものをアレンジできます。システムがロードするファイルを変更する最も簡単な方法は、 #+/- を と組み合わせて使用​​すること*features*です。

機能を追加する 1 つの方法は、.sbclrc (または実装のスタートアップ ファイル) にあります。よりプロジェクト固有のものが必要な場合は、ファイルを読み取る関数を呼び出すシステムで perform :before load-op を定義できます。その内容*features*は、さまざまなコンポーネントが読み取られるように変更できます。このスキームを使用して、構成ファイルで変数をロードします。

私のシステムがfooの場合

(defsystem #:foo
  ...
  :dependencies (#:foo-config)
 ...)

(defmethod perform :after ((op load-op)
                           (system (eql (find-system :foo-config))))
  (asdf/package:symbol-call :foo/config-loader 'load-config
                            (system-relative-pathname :foo-config
                                                      #P"foo.config")))

#+/- は読み取り時に機能するため、システム定義を読み取った後に機能が変更されるため、機能しないと思います。これを回避するハックな方法は、単に構成システムを要求し、機能のセットアップ後に after メソッドでシステムを要求するようにすることです。

私の2c。

于 2015-04-10T05:21:31.487 に答える