問題タブ [moose]
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 - Apache::Session と CODE 参照を使用して Moose オブジェクトを格納する代替手段
Apache::Session::File を使用して保存したい Moose クラスがあります。
ただし、デフォルトではApache::Session::Fileはそれを保存せず、代わりにエラーメッセージが表示されます:
この問題は、次のように設定することで回避できます。
CODE 参照をシリアライズできるようにするため。
Moose クラスの問題のあるメソッドを以下に示します。これは、mysql データベースから列を取得します。
したがって、おそらく dbh オブジェクト (DBIx::Connector など) には CODE 参照が含まれています。
$Storable::Deparse と $Storable::Eval を設定するよりも、この Moose クラスのシリアル化を許可するためのより良い代替手段はありますか?
次のテスト スクリプトでは、エラーが発生します。
SQL 接続クラスは次のように定義されます。
TestCell クラスは次のように定義されます。
perl - ムースは本当にこれほど遅いですか?
最近Mooseをダウンロードしました。実験的に、Mooseの既存のモジュールを書き直しました。繰り返しの多いコードを書かないようにするのに便利な方法のようです。モジュールのテストを実行しましたが、少し遅れていることに気づきました。-d:DProfを使用してコードをプロファイリングしましたが、この行を含めるだけのようです。
コード内では、実行時間が約0.25秒増加します(私のコンピューターでは)。これは典型的なことですか?私は何か間違ったことをしていますか、それを誤ってインストールしましたか、それともこれだけの遅延を本当に期待する必要がありますか?
perl - Moose サブルーチンでは、$meta はどのようにして @_ に入りますか?
chromatic の最近のブログで Moose サブルーチンに興味を持ちましたhas
。has
Moose のソース コードを調べていたところ、サブルーチン内に$meta
から展開された変数があることに気付きました@_
。どこ$meta
から来たの?Moose と Class::MOP のさまざまなモジュールを調べ始めました。多くのサブルーチンでは、引数として特に渡されていなくても、$meta
の最初の引数としてよく見られるようです。@_
has
編集:サブルーチンの元のソース コードは次のとおりです。
perl - Moose オブジェクトのビルダー サブルーチンの引数
現在、基本クラスの 1 つを拡張するすべてのオブジェクトにビルダー メソッドを委譲しています。私が直面している問題は、すべてのオブジェクトがそれ自体の属性を読み取るか、値で渡される必要があることです。
これは現在可能ですか、それとも他の方法で行う必要がありますか?
perl - Catalyst で使用するために Moose オブジェクトを JSON に変換するにはどうすればよいですか?
Catalyst::View::JSONを介してJSON::XSにフィードしようとしている一連の Moose オブジェクトがあります。JSON::XS は、祝福されたデータ構造をエンコードできません。MooseX::Storage::Format::JSONがあることを私は知っています。しかし、それはかなり重すぎるようです。私が探しているのは、本質的にXXX.pmが提供するものと同じ情報です。生データ構造を再帰的に unbless して、(内部で使用するドライバー) が表示できるようにしたいだけです。JSON::XS
JSON::Any
C:V:JSON
オブジェクトを使用Catalyst::View::JSON
しJSON::XS
て使用するための最良の方法は何ですか? Moose
私には4つの明らかな選択肢があるようです:
- 公開された引数が Moose オブジェクトである場合、リクエストを読み取ってファイナライズするようにパッチを適用することにより、Moose オブジェクトを操作し
Catalyst::View::JSON
ます。C:V:JSON
freeze
JSON::XS
の戻り値へのフォールバックにパッチを適用します$obj->freeze if $obj->isa('Moose') && $obj->does('MooseX::Storage::Format::JSON')
。および proxy によってMX:S:F:JSON
使用されるクラスが(使用するために呼び出されるMoose オブジェクトに対して別の内部エンコーダーを選択した場合に大量のバグが発生することを考えるのは嫌です。JSON::Any
MX:S:F:JSON
JSON::XS
JSON::Any
JSON::XS
- 再帰的に unbless する方法を見つけて、
Catalyst::View::JSON
そのことをやらせてください。 - 絶対に使わない
Catalyst::View::JSON
でください。STDOUT$obj->freeze
に書き込み、手動でリクエストをファイナライズするだけです。これは最もハックなようです。
他にもいくつかのオプションがあると思いますが、アイデアはありますか?私の最善の策は何ですか?
perl - 多くの Moose ベースのサブクラスで属性をオーバーライドする最も効率的な方法は何ですか?
HTML::FormHandlerを使用しています。field_name_space
それを使用するには、それからサブクラス化することを想定しており、 orなどのいくつかの属性をオーバーライドできますattribute_name_space
。
ただし、現在、すべてが拡張されているフォーム、HTML::FormHandler
またはその DBIC ベースのバリアントHTML::FormHandler::Model::DBICが多数あるため、これらのオーバーライドされた属性が何度も繰り返されています。
それらをロールに入れようとしましたが、+attr
ロールでは表記がサポートされていないというエラーが表示されます。けっこうだ。
この繰り返しをなくす最善の方法は何ですか? おそらくサブクラス化を考えましたが、 と に対して 2 回実行する必要がありますHTML::FormHandler
。HTML::FormHandler::Model::DBIC
さらに、サブクラス化は通常、代わりに Roles を使用したほうがよいというのが一般的な考えだと思います。
更新:例を挙げるのは良い考えだと思いました。これは私が現在行っていることであり、コードの繰り返しが含まれます。ご覧のとおり、1 つのフォームが別の親クラスを使用しているため、属性オーバーライドを入れるために 1 つの親クラスを作成することはできません。2 つ作成する必要があり、冗長性も追加されます。
perl - クラス/パッケージ/モジュールにどのように名前を付けますか
ロールを適用できるように別のモジュールを拡張することだけを目的としているパッケージに、どのように名前を付けますか? (サブクラス) Template::ContextをMooseで拡張するパッケージが必要なので、それに適用する役割と特性を作成できますが、このパッケージ (クラス) の名前がわかりません。何かアドバイス?
perl - around メソッド修飾子に変数を渡す
around
MethodModierへの複数の呼び出し間で変数を渡すことは可能ですか? 例 (それは機能しませんが、うまくいけば私がやりたいことを伝えます)
最終的には、これらの「周り」をプラグ可能なトレイトに配置したいと考えています。事前にどのトレイトがロードされているかはわかりませんが、最終的な出力はきれいにフォーマットされます。
私がこれについて完全に間違っていると考えている可能性があるので、他の提案を歓迎します。
perl - トレイトの一部としてロードされたメソッド修飾子を注文できますか?
これは前の質問へのフォローアップです。修飾子を含む複数のプラグイン/特性がaround
ある場合、特定の実行順序を保証することは可能ですか (どれが実際にロードされるかがわからないため)? それとも、私が書いたコードとドキュメントでのみそれを制御できますか?
例: それぞれに を持つ 3 つのロールがありaround
、それぞれをオプションで特性としてロードできますが、複数のロールをロードする場合、正しく連携するには特定の順序でロードする必要があります。たとえば、Trait ABC をこの順序でロードすると正常に動作しますが、Trait BAC のようにロードすると、不安定な動作が発生します。
ユーザー (プログラマー) が間違った順序でロードするのを防ぐ方法はありますか?