問題タブ [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.

0 投票する
1 に答える
1215 参照

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 には、私がまだ発見していない、私が望むものを達成するためのはるかに優れた機能があります.

0 投票する
1 に答える
1971 参照

perl - MooseX::Declare でインライン コンストラクタをオフにする

ご挨拶、

Moose に関する以前の質問の補足として、新しい問題に遭遇しました。Moose 以外の親クラスを拡張するためにRecipe 12を使用する Moose クラスがあります。ここにあります:

これはうまくいきます。を使用するこのクラスのサブクラスもありますMooseX::Declare。ただし、デフォルトの Moose コンストラクターをオーバーライドしているため、サブクラスは次の警告を発します。

MooseX::Declareバックグラウンドで自動的に呼び出すため、パラメーターmake_immutableをオンにする方法を理解できませんでした。inline_constructor => 0

0 投票する
1 に答える
372 参照

perl - MooseX::NonMoose クラスのミックスインの問題

次の点を考慮してください。

これをコンパイルしたときの出力は次のとおりです。

なぜ私は気にするのですか?useCGI::Application::Plugin::* クラスを実行しようとするとCGI::Application、コンパイル時にすでに継承していると想定されるためです。add_callbackプラグイン クラスは、私のクラスのクラス メソッドとして呼び出そうとしますが、@ISAまだ設定されていないためできません。

これを解決する最善の方法は何ですか? @ISAブロックを手動で微調整BEGINすると干渉しMooseX::NonMooseますか?

編集

以下は機能しているように見えますが、不快だと思います。

これが良いアイデアかどうかを知るには、Moose の内部構造について十分に (または実際には何も) 知りません。

0 投票する
4 に答える
560 参照

perl - Moose の自動プラグマ エクスポートを拡張するにはどうすればよいですか?

インポート中にMooseが自動的にオンになる仕組みを知っていますstrictか? Moose クラスをwarningsオンにして、その動作を拡張したいと考えていautodieます。use feature ':5.10'

Moose::ExporterMooseimportがこれstrict->importをどこで行っているかを追跡しましたwarnings->import

ただし、このインポート メソッドを Moose 風に拡張する方法がわかりません。

これをどのように処理すればよいですか?

http://www.friedo.com/bullwinkle.gif

0 投票する
2 に答える
697 参照

lisp - クラスが common lisp の別のクラスのサブクラスであるかどうかをテストする

ある CLOS クラスが別の CLOS クラスのサブクラスであるかどうかを確認するにはどうすればよいですか?

0 投票する
2 に答える
1665 参照

groovy - Groovy メソッドがありません

オブジェクトFoo内にクロージャーがあり、クロージャー内に「 myStaticMethod 」というメソッドを定義します。これは、オブジェクトFooの外側でクロージャーが呼び出されたときに解決したいものです。また、オブジェクト Foo 内に同じ名前の静的メソッドを「意図的に」持っていることもあります。クロージャーを呼び出すとき、「解決戦略」を DELEGATE_ONLY に設定して、クロージャー内で定義されているmyStaticMethodへの呼び出しをインターセプトします。

私はmissingMethodでそれを達成しようとしましたが、メソッドが傍受されることはありません。私がフーを作るとき。myStaticMethod非静的。メソッドはインターセプトされます。私の解決戦略はDELEGATE_ONLYに設定されていますが、なぜこれが起こっているのかよくわかりません。Foo.myStaticMethod をstatic にするかどうかは問題ではないか、何か不足しています

0 投票する
2 に答える
1040 参照

ruby - Rubyにはメタオブジェクトプロトコルがありますか?ない場合、それを実装することは可能ですか?

私の無知を許してください、しかしメタオブジェクトプロトコルとは何ですか、そしてRubyはそれを持っていますか?そうでない場合、Ruby用に実装することは可能ですか?Rubyが持つとしたら、メタオブジェクトプロトコルはどのような機能を備えているでしょうか?

0 投票する
3 に答える
1505 参照

unit-testing - JavaコードのGroovyでの単体テスト - Javaクラスをモックする方法は?

私は Java で書かれた大規模なプロジェクトで Groovy を紹介しています。まず (ほとんどの人がそうであるように)、Groovy で Java クラスの単体テストを作成します。

だから私が持っている問題は次のとおりです。

ClassA と ClassB という 2 つの Java クラスがあり、次のようにやり取りしているとします。

ClassB は、データベースからいくつかのデータを検索するサービスです。ClassA 機能をテストしています。だから私はどういうわけかClassBをモックしたいので、単体テストのコンテキストでinvokeSomeStaticMethod()はテスト用にモックされた値を返します。私が理解している限り、ここでの主な問題は、両方のクラスが Java であるため、ClassB.invoke... メソッドが Groovy Mocks のベースとなっている Groovy MOP を介してルーティングされないことです。私は正しいですか?そして、どうすれば必要なものを達成できますか?

ありがとう!ミハイル

0 投票する
2 に答える
635 参照

lisp - lisp:スコープ内で一時的なメソッドの特殊化を作成する方法

Common lispの場合:スコープ内の既存の関数を再定義しますか?OPは似たようなものを求めました。しかし、関数ではなく、メソッドスペシャライザーを作成したいと思います。基本的に、メソッドが次のように定義されていると仮定します。

私がやりたいのは(擬似コード)です:

実際の用途は、特定のオブジェクトのスロット書き込みのオンデマンドインターセプトを本質的に作成するsetf slot-value-using-classことに特化した一時的な環境を作成したいということです。eql(目的は、古いスロット値と新しいスロット値をどこかに記録してから、次のメソッドを呼び出すことです。)すでにインスタンス化された標準オブジェクトをインターセプトしたい場合があるため、メタクラスを作成したくありません。

もちろん試してみましたが、うまくいきませんでしたが(どうやってDEFMETHODLABELS)、経験豊富な人にそのような方法で実行できないことを確認したり、適切な方法を提案したりしたいと思いました。

コメント?

編集:

DanielとTerjeは、可能性に向けて私の知識を広げるための優れたリンクを提供しますが、そこに行く前に、よりバニラなアプローチを探すためにもう少しプッシュしたいと思います。私は、環境に入るときにadd-methodを実行することを検討してきました。これは、eqlに特化し、終了時にremove-methodを実行します。私はまだ終わっていません。誰かがそれらで遊んだことがあるなら、コメントはいいでしょう。スレッドを最新の状態に保ちます。

編集2:私はadd-methodシナリオでそれを行うのに近いですが、問題があります。これが私が試したことです:

オブジェクトスロットとデータを引数として(my-test)を呼び出すと、次のようになります。

だから私はここで立ち往生しています。適用可能なメソッドにeql-specialized:afterメソッドが含まれるようになったため、特殊化は機能しますが、残念ながら呼び出されないようです。誰かが助けてくれるので、私はそれを終えて、それを甘い小さなユーティリティマクロにリファクタリングすることができますか?

0 投票する
2 に答える
297 参照

lisp - sbclの奇妙なクラス優先順位リスト

sbclでは、

consがリストから継承し、その逆ではないのは不思議ではありませんか?ここで何が欠けていますか?