問題タブ [clos]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
oop - 最初の引数がnilのときにメソッドを呼び出すことはできませんか?
image-rectangle
とcarpet
は構造体です。
このメソッドが次のように呼び出された場合:
私は次のようになっています:
こんな感じですか?nil
おそらく、それを議論として受け入れるようにする方法はありますか?nil
タイプとcarpet
が適用可能な引数のみを指定するにはどうすればよいですか?
common-lisp - おそらくそのアドレスを使用して、オブジェクトを一意の文字列として出力します
各オブジェクトが独自のノードを取得するような方法で、CLOS オブジェクトから GraphViz ノード名を作成する方法が必要です。オブジェクトを変更して GraphViz ビジュアライゼーションを再作成すると、残っているオブジェクトに対して同じノード名が取得されます (参照的に) 同じ。
オブジェクトを印刷しようとすると、ほとんど良い結果が得られます (PRINT-OBJECT
クラスをオーバーライドすることはないため)。
1002D22C81
その部分だけを文字列として取得する方法はありますか? 次に、そのような GraphViz ノード名を作成できますN1002D22C81
。
または(format nil "~A" obj)
、 の間の部分を取得して、結果を文字列として処理する必要があり{}
ますか?
methods - CLOSにおける「標準メソッドの組み合わせ」と「簡易メソッドの組み合わせ」の違い
私は Common Lisp Object Protocol (CLOS) を研究してきましたが、1 つの疑問に遭遇しました。
CLOSの「標準メソッドの組み合わせ」と「単純メソッドの組み合わせ」の意味は何ですか?
また、「単純なメソッドの組み合わせ」では、「リスト」メソッドの組み合わせがあるとはどういう意味ですか?
locking - Lisp、CLOS: ロック クラスにスロットを追加する
ロック クラスに新しいスロットを追加しようとしています。階層内に多数のロックがあり、すべてのロックの親ロックを保存すると、デバッグ中に問題を検出しやすくなるため、これは便利です。
残念ながら、これは ensure-class 関数では実行できないようです。組み込みクラスとしてリストされているため、スロットを「プロセス」に追加できますが、「ロック」には追加できません。「プロセス: lisp、CLOS:プロセスクラスにスロットを追加する方法については、私の以前の質問を参照してください。
この問題を解決する方法を知っていますか? それが不可能な場合、考えられる唯一の代替手段は、ロックの階層関係をハッシュ テーブルに保存することですが、一部のロックは実行時および異なるプロセスで作成されるため、さらに別のロックを追加する必要があります。ロックのメタデータを格納するハッシュテーブルにアクセスします。
これは非常に非効率的だと思います。もっと良いアイデアはありますか?
編集:明確にするために、私はClozure Common Lispを使用しています。
common-lisp - common lisp: defstruct 構造体のスロット値
一般的な Lisp では、スロット名/シンボルを使用して構造体スロットにアクセスするには、何を使用できますか?
私が欲しいのは
私はclozure clを使用しています.clozure clではこれが機能します。ただし、知る限り、これは非標準の動作です (「未定義の動作」C++ と同等)。別の CL 実装に切り替えるつもりはないので slot-value
、構造体を使い続けるべきですか、それとももっと良い方法がありますか?
common-lisp - 構成ファイルからクラス インスタンスを作成する慣用的な方法
編集:質問を再構築したので、(うまくいけば)答えやすくなります。私は CL を初めて使用するので、何をしようとしているのかを説明するのが難しい場合があります。
私は過去数週間にわたっていくつかの Common Lisp を学んでおり、クラスのスロット値のいくつかを定義する構成ファイルを指定してオブジェクトのインスタンスを作成する最良の方法を考えていますが、値は何らかの形式で正規化する必要があります割り当てられる前に。
したがって、簡単な例として、次のクラスがあるとします。
と
外部ファイルで指定する方法が欲しいです。instance-a.lisp
ただし、インスタンスを構築するときは、値 x を最初に何らかの方法で正規化する必要があります。への最終的な呼び出しは次のmake-instance
ようになります。
どこ(name-value-from-config)
が「A」で、(x-value-from-config) が 5 になります。 注: これらの 2 つの形式は、構成からの値で構築する必要があることを示すプレースホルダーとしてのみここにあります。
私の最初の考えは、構成ファイルにあるものはすべて、適切なキーを持つハッシュ テーブルまたは plist に変換することです。
types - nil をワイルドカード型として扱う
私は Lisp プログラムを書いていて、型について少し気をつけようとしています。パフォーマンスが向上したと思いますが、ドキュメントと安全のために型注釈を使用することにもっと興味があります。問題はnil
. これまでに2つの問題に遭遇しました。
展示物A:
展示物 B:
ここでのベストプラクティスは何ですか? これまでのところ、私が持っていたリモートで洞察力のある唯一のアイデアは、null オブジェクト パターン(defclass nil-quux-class (quux-class) ...)
を使用してandを持つ(defclass nil-foo-component (foo-component) ...)
ことですが、それはせいぜいハッキーに思えます。理由はわかりませんが、そうです。率直に言って、私はCLOSでパターン化された回避策を設計することに慣れていません:)