問題タブ [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 - Moose :: Error::Croakエラーの報告は発信者の観点からではありません
私は最近、Mooseとその優れたOOフレームワークを使い始めたばかりでなく、新しいOOの概念を学ぶこともできました。私がやりたかったことの1つは、オブジェクトの作成中に呼び出し元の観点からエラー報告を行うことでした。Mooseには、croak呼び出しによるデフォルトのエラー報告をオーバーライドするようにMooseに指示するモジュールMoose :: Error::Croakがあることがわかりました。私はそれを使用しましたが、それは役に立たなかったようです
ムースコード-Foo.pm
ムースコード-fooser.pl
これはエラーで失敗します:属性(attr1)は/usr/local/lib/perl/5.8.8/Class/MOP/Class.pm行364に必要です
Moose :: Error :: Croakが使用されていない場合、これは実際のスタックトレースよりも簡潔です。ただし、発信者の観点からは報告しません。これがPerl5OOコードであり、Foo.pmが次のようになっている場合:
そして、fooser.plが実行された場合、エラーが発生します。
「ERR:fooser.plの6行目にattr1を提供しませんでした」
これは、発信者の観点から、行番号を指しているためです。MOP.pmの行番号ではなくfooser.plの6。364。
Mooseでこれを行うにはどうすればよいですか?それとも私はここで何かを誤解していますか?
perl - Moose を Mac にインストールする際の問題 (コンパイル Sub::Name prereq)
Macbook Pro に Moose (CPAN モジュール) をインストールしようとしています。Sub-Name への依存関係を検出し、これをインストールしようとすると、次のエラー メッセージが表示されます。どうすればこれを治すことができるかについて何か考えはありますか?
+++ 補遺 +++
コマンド sudo port install p5-moose を使用する提案を試みました
インストールは成功したと報告されましたが、「use Moose'」を含むファイルには次のように表示されます。
古いマシン (インテル以前) からこのマシンに移動したときに、バイナリが移動されて再コンパイルする必要があるかどうか疑問に思っています。しかし、もしそうなら、どうすればいいですか?
perl - Moose を Test::Class で使用するにはどうすればよいですか?
私は現在、同僚が作成したテスト スイートをリファクタリングしており、Test::Class[::Most]
その間に使用したいと考えています。始めたとき、Moose
コードを少し分離するためにいくつかのロールを実際に使用できることがわかりました。ただし、それは完全には不可能のようです。次のようなエラー メッセージが表示されます。
問題は、Moose
一緒に使用できTest::Class
ますか。
PS: コードは次のようになります。
perl - ポリモーフィズムのために、Moose が自身のクラスではなく子クラスのインスタンスを返すようにする方法
ビルダーがこのジェネリック クラスのインスタンスではなく、専用の子クラスのインスタンスを返すジェネリック クラスを作成したいと考えています。
Mooseは自動オブジェクト構築を行うため、これが可能かどうか、Moose構文を使用してこの動作を持つMooseクラスを作成する方法を理解できません。
例: ユーザーは次のように尋ねます: $file = Repository->new(uri=>'sftp://blabla')
.... そして `Repository::_Sftp`` インスタンスが返されます
ユーザーは$file
、実際のサブクラス (ポリモーフィズム) を知る必要なく、Repository インスタンスであるかのように使用します。
注:
要求されたように、私が達成しようとしていたことについてもっと明確にする必要があったかもしれません:
私のクラスの目的は、単に「隠し」リポジトリを作成することによって、新しいリポジトリ スキーム (sftp など) を追加できるようにすることです:: _Stfp クラスを作成し、リポジトリ コンストラクターにケースを追加して、url に応じて適切な特殊化されたオブジェクトをファクトリにします。リポジトリは、特殊なオブジェクトが実装するインターフェイスを提供する、仮想基本クラスのようなものです。
これはすべて、プログラムの残りの部分を変更せずに新しいリポジトリ スキームを追加するためのものです。つまり、知らず知らずのうちに、特殊化されたインスタンスをリポジトリ インスタンスであるかのように処理してしまいます。
perl - 実行時に既存のMooseロールをクラスに構成するにはどうすればよいですか?
抽象My::Objectと具体的な役割の実装My::Object::TypeAとMy::Object::TypeBを定義するとします。保守性の理由から、オブジェクトタイプを調べて役割を適用するハードコードされたテーブルは必要ありません。DWIMmyの例として、My :: Object:でこれらの線に沿って何かを探しています。
次の手順を実行して、My :: Object::TypeBロールが適用されたMy::Objectを取得します。
これは私が望むことをするつもりですか、それとも私は完全に間違った方向に進んでいますか?
編集:私はこれを単純化しすぎました。オブジェクトをインスタンス化するときにタイプを知る必要はありません。オブジェクトにタイプを判別させ、正しいロールのメソッドを適切に適用してもらいたいのです。これを明確にするために質問を編集しました。
perl - Perl Moose :: Util :: TypeConstraintsのバグ?名前に無効な文字が含まれているというこのエラーは何ですか?
Moose :: Util :: TypeConstraintsの例外を追跡しているのは何時間も経っていますが、タイプをチェックする場所がわかりません。名前が正しくないことがわかります。問題を特定するために、縮小された例までエラーを追跡しましたが、それがわからないことがわかりました。
Moose :: Util :: TypeConstraintsのバグが発生しましたか?
以下に、クラッシュするコードを示します。
perl - Perl OO フレームワークとプログラム設計 - Moose と Conway のインサイドアウト オブジェクト (Class::Std)
これはユースケースタイプの質問ですが、より広く適用できるほど一般的でもあります。
要するに、私は多かれ少なかれコマンドライン ラッパーであるモジュールに取り組んでいます。〇当然。(誰かがそれを望んでいる場合を除いて) あまり詳しく説明しなくても、システムがそれほど複雑になることはありませんが、このフレームワークに 3 つまたは 4 つのオブジェクトがあるのは自然なことだと感じました。最後に、これは私が公開するオープンソースのものであり、同じ会社の数人の開発者が取り組んでいるモジュールではありません。
まず、Class::Std を使用して OO を実装しました。これは、Perl のベスト プラクティス (Conway、2005 年) がインサイド アウト オブジェクトを使用する理由について適切な議論を行ったためです。どの属性にアクセスするか、適切なカプセル化などを完全に制御します。また、彼の設計は驚くほどシンプルで賢いものです。
私はそれが好きでしたが、誰も実際にこれを使用していないことに気付きました。実際、コンウェイ自身はもうこれを推奨していないようです?
というわけで、みんなの大好きなMooseに引っ越しました。使い方は簡単ですが、私がやりたいことに対しては機能的にやり過ぎです。大きな大きな欠点は、モジュールの依存関係が多数あるため、モジュールのユーザーがそれらをすべてダウンロードする必要があることです。マイナーな欠点は、私が実際に必要とする以上の機能を備えていることです。
推奨事項とは何ですか? おそらく時代遅れのモジュールを使用するように強制したり、モジュールのすべてのユーザーに Moose とそのすべての依存関係をダウンロードするように強制したりして、仲間の開発者に迷惑をかけますか?
適切な Perl OO フレームワークの 3 番目のオプションで、これらの 2 つのいずれでもない、人気があるものはありますか?
perl - mod_perl2 moose アプリケーションとの DB 接続が多すぎます
mysql データベースへの接続を必要とする mod_perl2 ベースの Web アプリがあります。moose ロールに SQL 接続の仕様を実装しました。
単純化すると、ロールは次のようになります。
次に、DB への接続を必要とするすべての moose クラスでこのロールを使用します。
声明。
これは少数のオブジェクトが作成される場合にはうまく機能しますが、多くのオブジェクトが作成されるとすぐに問題が発生します。たとえば、httpd ログでは、次のエラーが表示されます。
DBI connect('alcatelRSA;host=10.125.1.21;port=3306','tools',...) 失敗: C:/Perl/site/lib/DBIx/Connector.pm 行 30 での接続が多すぎます
DBIx::Connectors の "disconnect" 呼び出しを使用して毎回データベースへの接続を閉じることを考えましたが、必要に応じて接続を開いたり閉じたりすると、パフォーマンスへの影響が深刻なようです。
この問題に関する別の提案はありますか?
perl - Mooseの読み取り専用の属性特性とその設定方法は?
Mooseの読み取り専用属性特性を設定するにはどうすればよいですか?
コンストラクターまたは実行時に設定できない場合の読み取り専用属性特性の目的は何ですか?Moose :: Meta :: Attributeに欠けているものはありますか?を使用して設定する方法はありmeta
ますか?
perl - Mooseにおけるシングルトンの役割
Perl と Moose を使用してシングルトン ロールを作成しようとしています。MooseX::Singleton モジュールが利用可能であることは理解していますが、私たちのプロジェクトに別の CPAN モジュールが必要な場合は常に抵抗があります。これを試して少し問題が発生した後、私の方法が機能しない理由を理解したいと思います。私が書いたシングルトンの役割は次のとおりです。
これは、シングルトン ロールを使用するクラスが 1 つだけの場合に機能するようです。ただし、2 つのクラス (ClassA と ClassB など) の両方が Singleton ロールを使用すると、両方が共有 $_singleInstance 変数を参照しているように見えます。ClassA->getInstance を呼び出すと、ClassA オブジェクトへの参照が返されます。同じスクリプトで後で ClassB->getInstance を呼び出すと、タイプ ClassA のオブジェクトへの参照が返されます (明らかに ClassB の getInstance メソッドを呼び出したにもかかわらず)。ロールを使用せず、Singleton ロールのコードを実際にコピーして ClassA と ClassB に貼り付けると、正常に動作するように見えます。何が起きてる?