問題タブ [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.
lisp - クラスのファイナライズ:ダミーインスタンスの作成を避けるには?
サードパーティのライブラリがファイナライズされたかのようにクラスに作用する必要があるという問題に遭遇しました。少し読んだ後、このメカニズムの背後にある動機を理解しましたが、それがどのように機能するかはよくわかりません.
例:
最初の行を追加しない限り、関数はコンパイルされず、次のエラーが発生します。
optima
はパターン マッチング ライブラリであり、指定されたパターンに対して(expression :op op ...)
クラスのインスタンスをマッチングしますexpression
。詳細はわかりませんが、このクラスに定義されているアクセサを知る必要があるようで、その情報は確定するまで利用できないようです。では、ファイナライズの問題を回避する方法はありますか?
クラスは延長されません (少なくともこのプロジェクトでは延長されず、計画されていません)。ダミーのインスタンスを作成してもそれほど害はありません...それはただの醜い解決策なので、より良い解決策を見つけたいと思っていました。また、おそらく、ファイナライズに関する詳細情報も得られるでしょう。これも良いことです:)
common-lisp - メソッドの組み合わせを使用してコードの重複を減らし、可能な限り早いリターンを維持する方法
処理する必要があるメッセージを表す一連のクラスを取得しました。ただし、ハンドラーの空きスペースは限られています。したがって、メッセージ オブジェクトを処理するハンドラーの「ディスパッチ」は、空きスポットがあるかどうかを最初に確認する必要があります。
あれば→発送。
ない場合 -> ディスパッチせず、対応するメッセージを返します
コードのこの部分はどのディスパッチ メソッドでも同じであるため、メソッドの組み合わせ機能を使用して強制するのが最善であると考えましたが、その方法がわかりません。
現在のコード ベースでは、:before メソッドを使用しようとしましたが、そのようなコンテキストでは return を使用できないようです。
このアプローチは正気ですか?return-from
(私はすでに同じ結果で試しました)
common-lisp - ベクトルと行列に特化
私はリアルタイム グラフィックスの実験に common-lisp を使用していますが、これまでのところ非常に優れています。速度とcffiとの簡単な互換性に対する私の要件は、「型付き」配列を使用していることを意味します。コードの中で本当に醜いと感じるのは、行列とベクトルの数学関数の一般的なバージョンです。CLOSは配列の長さに特化できないので、私は次のようなことをしています:
これは機能しますが、正しくないと感じます。私はさまざまな CL 実装の拡張を見てきましたし、MOP の可能性についても耳にしました。
一部の CL 実装で機能が損なわれるのではないかと恐れたため、私はこれを避けてきましたが、最近ではCloser-to-Mop プロジェクトを見てきました。
主な質問: MOP は、長さに特化するためのより効率的な方法を提供しますか? 私が注目すべき領域/技術はありますか?
inheritance - CLOSのinstanceofと同等ですか? インスタンスが別のオブジェクトから継承されているかどうかを確認するには?
a から継承された場合に T を返すインスタンス b で、どの述語関数を呼び出すことができますか? の流れで:
lisp - Lisp でオーバーロードされた別のメソッドを呼び出す
これが可能かどうかはわかりませんでしたが、(かなり醜い) 回避策を使用しました。
以下のようなクラス構造があるとします。
そして方法:
ここで、「型キャスト」関数が存在すると仮定して、'a に対して print を呼び出し、次に 'b に対して print を呼び出したいと思います。
私の回避策は、b の print-object 内にタイプ a のオブジェクトを作成してから、prin1 を呼び出すことです。
私は強制しようとしましたが、無限ループになってしまいました。find-method と call-method を試してみることができることに気付きました (うまくいきますか?)。または、:around で解決策を試す必要がありますか?
scheme - make-operator は swindleobject を返します
このコードをコンパイルして書くと(スーツを作る)| (ジャケットを作る) | make (ズボン) をインタープリターに入れると、戻り値は常にです#<procedure:swindleobj>
が、 のようになるはず#<jacket size=40>
です。
必要なものを見逃しましたか、それとも何が間違っていますか?