Mooseオブジェクトの内部表現が(正当な)未定義のままであることがわかります。しかし、ほとんどの場合、基本的な祝福されたハッシュリファレンスになるでしょう。メソッドコール($object->attribute()
)によってオブジェクトにカプセル化されるのではなく、祝福されたハッシュ($object->{attribute}
)からオブジェクト属性にアクセスすることを期待するレガシーコードによって呼び出される新しいオブジェクトが作成される状況では、属性が正しく機能するためには、オブジェクトを祝福されたハッシュリファレンスとして保存する必要があることを明示的に定義する方法はありますか?
オブジェクトの内部表現から渡される祝福されたオブジェクトをデカップリングするモジュールがありますか?それは、インスタンス化されたメタオブジェクトに対するメソッド呼び出しに、定義済みのハッシュ・キーを結びつけることができる束縛されたハッシュを渡すことができるように思われるので、古いコードがオブジェクトを$object->{attribute} = 'blahblah'
と呼んでも、
ええ、元のオブジェクトのrefへのアクセスを知っていました。明らかにメソッド修飾子のようなものは恐ろしくそれをやってしまうでしょう。 ( 'watusi => sub {warn" watusi changed! "}}')。実際にあなたの答えをhashrefアクセスコードのコメントで修正して、Googleでこれを見つけても、悪意のあるコードを盲目的にc&pすることはありません。内部ストレージを変更し、メソッドがhashrefコンテナへの呼び出しを処理できるようにするMooseXモジュールがあることを本当に望んでいました。しかし明らかにそうではありません。 – Oesor