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