問題タブ [mop]
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.
perl - Moose での多重継承コンストラクターの扱い
ご挨拶、
I'm learning Moose and I'm trying to write a CGI::Application subclass with Moose, which is made difficult by the fact that CGI-App is not based on Moose.
In my other CGI-App subclasses, I like to have a parent class with a setup
method that looks at the child class's symbol table and automatically sets up the runmodes. I figure I can use Moose's metaclass facilities to achieve the same thing in a cleaner way. So here is what I have in my parent class:
...and in my child class:
I realized that the reason my runmodes were not getting setup properly is because setup
is called by the CGI-App constructor, and Moose::Object
is sticking its own constructor in my class. I tried to solve this with a method modifier:
This gives me
しかし、私はこれを完全に間違った方法で行っていると感じています. Moose には、私がまだ発見していない、私が望むものを達成するためのはるかに優れた機能があります.
perl - MooseX::Declare でインライン コンストラクタをオフにする
ご挨拶、
Moose に関する以前の質問の補足として、新しい問題に遭遇しました。Moose 以外の親クラスを拡張するためにRecipe 12を使用する Moose クラスがあります。ここにあります:
これはうまくいきます。を使用するこのクラスのサブクラスもありますMooseX::Declare
。ただし、デフォルトの Moose コンストラクターをオーバーライドしているため、サブクラスは次の警告を発します。
MooseX::Declare
バックグラウンドで自動的に呼び出すため、パラメーターmake_immutable
をオンにする方法を理解できませんでした。inline_constructor => 0
perl - MooseX::NonMoose クラスのミックスインの問題
次の点を考慮してください。
これをコンパイルしたときの出力は次のとおりです。
なぜ私は気にするのですか?use
CGI::Application::Plugin::* クラスを実行しようとするとCGI::Application
、コンパイル時にすでに継承していると想定されるためです。add_callback
プラグイン クラスは、私のクラスのクラス メソッドとして呼び出そうとしますが、@ISA
まだ設定されていないためできません。
これを解決する最善の方法は何ですか? @ISA
ブロックを手動で微調整BEGIN
すると干渉しMooseX::NonMoose
ますか?
編集
以下は機能しているように見えますが、不快だと思います。
これが良いアイデアかどうかを知るには、Moose の内部構造について十分に (または実際には何も) 知りません。
perl - Moose の自動プラグマ エクスポートを拡張するにはどうすればよいですか?
インポート中にMooseが自動的にオンになる仕組みを知っていますstrict
か? Moose クラスをwarnings
オンにして、その動作を拡張したいと考えていautodie
ます。use feature ':5.10'
Moose::Exporter
Mooseimport
がこれstrict->import
をどこで行っているかを追跡しましたwarnings->import
。
ただし、このインポート メソッドを Moose 風に拡張する方法がわかりません。
これをどのように処理すればよいですか?
lisp - クラスが common lisp の別のクラスのサブクラスであるかどうかをテストする
ある CLOS クラスが別の CLOS クラスのサブクラスであるかどうかを確認するにはどうすればよいですか?
groovy - Groovy メソッドがありません
オブジェクトFoo内にクロージャーがあり、クロージャー内に「 myStaticMethod 」というメソッドを定義します。これは、オブジェクトFooの外側でクロージャーが呼び出されたときに解決したいものです。また、オブジェクト Foo 内に同じ名前の静的メソッドを「意図的に」持っていることもあります。クロージャーを呼び出すとき、「解決戦略」を DELEGATE_ONLY に設定して、クロージャー内で定義されているmyStaticMethodへの呼び出しをインターセプトします。
私はmissingMethodでそれを達成しようとしましたが、メソッドが傍受されることはありません。私がフーを作るとき。myStaticMethod非静的。メソッドはインターセプトされます。私の解決戦略はDELEGATE_ONLYに設定されていますが、なぜこれが起こっているのかよくわかりません。Foo.myStaticMethod をstatic にするかどうかは問題ではないか、何か不足しています
ruby - Rubyにはメタオブジェクトプロトコルがありますか?ない場合、それを実装することは可能ですか?
私の無知を許してください、しかしメタオブジェクトプロトコルとは何ですか、そしてRubyはそれを持っていますか?そうでない場合、Ruby用に実装することは可能ですか?Rubyが持つとしたら、メタオブジェクトプロトコルはどのような機能を備えているでしょうか?
unit-testing - JavaコードのGroovyでの単体テスト - Javaクラスをモックする方法は?
私は Java で書かれた大規模なプロジェクトで Groovy を紹介しています。まず (ほとんどの人がそうであるように)、Groovy で Java クラスの単体テストを作成します。
だから私が持っている問題は次のとおりです。
ClassA と ClassB という 2 つの Java クラスがあり、次のようにやり取りしているとします。
ClassB は、データベースからいくつかのデータを検索するサービスです。ClassA 機能をテストしています。だから私はどういうわけかClassBをモックしたいので、単体テストのコンテキストでinvokeSomeStaticMethod()はテスト用にモックされた値を返します。私が理解している限り、ここでの主な問題は、両方のクラスが Java であるため、ClassB.invoke... メソッドが Groovy Mocks のベースとなっている Groovy MOP を介してルーティングされないことです。私は正しいですか?そして、どうすれば必要なものを達成できますか?
ありがとう!ミハイル
lisp - lisp:スコープ内で一時的なメソッドの特殊化を作成する方法
Common lispの場合:スコープ内の既存の関数を再定義しますか?OPは似たようなものを求めました。しかし、関数ではなく、メソッドスペシャライザーを作成したいと思います。基本的に、メソッドが次のように定義されていると仮定します。
私がやりたいのは(擬似コード)です:
実際の用途は、特定のオブジェクトのスロット書き込みのオンデマンドインターセプトを本質的に作成するsetf slot-value-using-class
ことに特化した一時的な環境を作成したいということです。eql
(目的は、古いスロット値と新しいスロット値をどこかに記録してから、次のメソッドを呼び出すことです。)すでにインスタンス化された標準オブジェクトをインターセプトしたい場合があるため、メタクラスを作成したくありません。
もちろん試してみましたが、うまくいきませんでしたが(どうやってDEFMETHOD
?LABELS
)、経験豊富な人にそのような方法で実行できないことを確認したり、適切な方法を提案したりしたいと思いました。
コメント?
編集:
DanielとTerjeは、可能性に向けて私の知識を広げるための優れたリンクを提供しますが、そこに行く前に、よりバニラなアプローチを探すためにもう少しプッシュしたいと思います。私は、環境に入るときにadd-methodを実行することを検討してきました。これは、eqlに特化し、終了時にremove-methodを実行します。私はまだ終わっていません。誰かがそれらで遊んだことがあるなら、コメントはいいでしょう。スレッドを最新の状態に保ちます。
編集2:私はadd-methodシナリオでそれを行うのに近いですが、問題があります。これが私が試したことです:
オブジェクトスロットとデータを引数として(my-test)を呼び出すと、次のようになります。
だから私はここで立ち往生しています。適用可能なメソッドにeql-specialized:afterメソッドが含まれるようになったため、特殊化は機能しますが、残念ながら呼び出されないようです。誰かが助けてくれるので、私はそれを終えて、それを甘い小さなユーティリティマクロにリファクタリングすることができますか?
lisp - sbclの奇妙なクラス優先順位リスト
sbclでは、
consがリストから継承し、その逆ではないのは不思議ではありませんか?ここで何が欠けていますか?