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

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

perl - mod_perl で冗長なリクエストの数を適切に減らすにはどうすればよいですか?

かなり大規模なレガシー プロジェクトで、いくつかの毛むくじゃらのモジュールを Moose クラスにリファクタリングしました。これらの各モジュールは、その属性を (遅延) フェッチするためにデータベース アクセスを必要とします。これらのオブジェクトはかなり頻繁に使用されるため、たとえば変更されていないデータに対する冗長なリクエストの数を減らしたいと考えています。

さて、どうすればそれを適切に行うことができますか?いくつかの選択肢があります:

  1. 5〜10分の有効期限でそれらを保存するロールを介してMooseクラスにキャッシュを実装しますmemcached(おそらくそれほど難しくはありませんが、遅延属性では注意が必要です)更新:KiokuDBはおそらくここで役立つ可能性があり、属性について読む必要があります
  2. (いずれにせよ実行する必要があります) に移行しDBIx::Class、このレベルでキャッシュを実装します (DBIC はおそらくそれだけでほとんどの苦痛を取り除きます)
  3. どういうわけか、オブジェクトを mod_perl プロセス内に永続化します (これを行う方法の手がかりはありません :()

あなたはこれをどのように行いますか?オブジェクトまたは ORM レベルでデータのキャッシュが優先されますか?

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

perl - Perl で Moose を使用して、パラメーター化されたロールのメソッドで実行時に作成されたメソッド内のコンシューマー クラスのメソッドにアクセスするにはどうすればよいですか?

実行時に新しいクラスを作成する必要があるパラメーター化されたロール内にメソッドを定義し、Moose::Meta::Class->create その正確なパラメーター化されたロールをそれに適用します。を使用してその役割の新しいメソッドも作成しています

sub {...} の内部で、コンシューマ クラスのメソッドにアクセスして何かに使用したいのですが、 を使用しようとし$self->get_methodましたが、うまくいきませんでした。

$self上記のサブの内部はMooseX::Role::Parameterized::Meta::Role::Parameterizable

これを行う場合、別の質問もあります。

なぜ$objectsome_type型ではなく、それは醜いの MooseX::Role::Parameterized::Meta::Role::Parameterizableですか?

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

perl - 新しいMooseクラスを作成し、実行時にそのクラスのオブジェクトをインスタンス化するにはどうすればよいですか?

を使用してメタクラスを作成した後Moose::Meta::Class->create、そのクラスをメタクラスとして使用して実際のMooseクラスをインスタンス化するにはどうすればよいですか?(メタクラスにもいくつかの役割を適用したいので、メタクラスも作成する必要があります。)

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

perl - 実行時に Moose オブジェクトのメソッドをどのように置き換えますか?

実行時にMooseオブジェクトのメソッドを置き換えることは可能ですか? Class::MOP::MethodMoose::Meta::Methodから継承する)のソースコードを見て、私は

実行時にオブジェクトのメソッドを置き換えることができます。を使用してメソッドを取得できます

しかし、これはうまくいきませんでした。

実行時にメソッドを変更することは考えられますか? そして、ムースでそれを行う方法は何ですか?

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

perl - Moose ベースのオブジェクトで isa() に正規表現を渡すことはできますか?

正規表現をパラメーターとして Moose で isa を使用できますか? 不可能な場合は、以外のもので同じことを達成でき->isaますか?

わかりました、次のタイプがあります Animal::GiraffeAnimal::Carnivore::Crocodile、やりたいのですが->isa(/^Animal::/)、できますか? できない場合、目的の効果を得るために何を使用できますか?

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

perl - MooseX::Declare を使用すると、主に起動時にパフォーマンスが低下しますか?

MooseX::Declare を使用した場合のパフォーマンス ヒットは、主に最初の処理 (つまり、定義を標準の Perl 構文に「変換」する処理) を行うときに発生しますか? つまり、コンパイルとランタイムの初期設定が完了したら、MooseX::Declare メソッドと従来の宣言で定義されたメソッドの呼び出しでパフォーマンスに違いはありますか?

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

perl - Moose 属性が読み取り専用かどうかをテストする簡単な方法はありますか?

現在、ブロックevalを使用して、属性を読み取り専用に設定したことをテストしています。これを行う簡単な方法はありますか?

作業コードの例:



UPDATE

答えてくれたfrido、Ether、Robert P、コメントしてくれたEther、Robert P、jrockwayに感謝します。

私は、Ether の答え$is_read_only!. 二重否定もそれを提供します。したがって、 coderef を出力せずに関数$is_read_only内で使用できます。is()

最も完全な回答については、以下の Robert P の回答を参照してください。誰もが非常に役に立ち、お互いの回答とコメントに基づいて構築されています。全体として、彼は私を最も助けてくれたと思うので、彼は現在受け入れられた回答としてマークされています。繰り返しになりますが、Ether、Robert P、frido、jrockway に感謝します。



疑問に思われるかもしれませんが、私が最初に行ったように、ここに と の違いに関するドキュメントがありますget_attribute( find_attribute_by_nameClass ::MOP::Class から):

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

perl - Moose:BUILDメソッドでファイルからオブジェクトを読み込んでいます

BUILDメソッドでファイルを読み取る必要があり、MooseX::Storageパッケージのloadメソッドを使用したいと思います。
ただし、このloadメソッドは新しいオブジェクトを作成するため、オブジェクトをインスタンス化すると、これはファイルから読み取られたオブジェクトではありません。以下のコードでは、ファイルを書き込むために状態2のオブジェクト$ m1を作成し、ファイルを読み取るためのパラメーターなしで$ m2を作成しますが、$m2に正しい値が含まれていません。その包み:

メインプログラム

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

perl - ミックスイン/ロール/トレイトをUMLで適切に表現するにはどうすればよいですか?

私と他の数人の開発者は現在、レガシーコードベースをクリーンアップしており、主にビジュアルレイヤーとデータレイヤーを分離しています。このリファクタリングに関与していない開発者がモデルを理解できるように、各クラスのスコープと望ましい使用法についてのコメントを含む(非公式の)クラス図を紹介したいと思います。私は怠け者なので、そのためにUMLGraphを使用したいと思います。

ただし、小さな問題があります。perlコードベースがあり、リファクタリングではMooseの役割が広範囲に使用されます。今、私は役割の適切な抽象化を見つけるのに十分なUMLを知りません-私の最初の推測はインターフェースですが、それらには実装も含まれています。多重継承もそれを完全にカットしません。

クラス図で役割を適切に表現するにはどうすればよいですか(またはどのように表現しますか)?

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

perl - Moose で基になる属性が変更されたときに遅延構築された属性を再構築する

属性を持つMooseクラスがありlazy_buildます。その属性の値は、別の (非遅延) 属性の関数です。

必要な属性の値が 42 のクラスを誰かがインスタンス化したとします。次に、42 の関数として計算される lazy 属性を要求します。次に、神経質になって最初の属性を変更します。

遅延属性は既にビルドされているため、ビルダーが再度呼び出されることはなく、遅延属性は古くなっています。

必要な属性に「ダーティ」フラグを維持し、レイジー フラグのアクセサがダーティ フラグをチェックし、必要に応じて再構築するという解決策があります。

ただし、これは大変な作業のようです。トレイトを使用するなど、Moose 内でこれを処理する方法はありますか?