3

Moose ベースのクラスがあり、いくつかの属性を削除したいと考えています。

それらを使用すると、非推奨の警告が生成されます。
おそらく、警告を無効にする方法があります。

package JSON::RPC::LWP;
...
use Moose;
...

has previous_id => (
  is => 'ro',
  isa => JSONValue,
  init_arg => undef,
  writer => '_previous_id',
  predicate => 'has_previous_id',
  clearer => 'clear_previous_id',
);

# default id generator is a simple incrementor
my $default_id_gen = sub{
  my($self,$prev) = @_;
  $prev ||= 0;
  return $prev + 1;
};

has id_generator => (
  is => 'rw',
  isa => 'Maybe[CodeRef]',
  default => sub{ $default_id_gen },
  trigger => sub{
    my($self,$coderef) = @_;
    unless( $coderef ){
      $self->{id_generator} = $default_id_gen;
    }
  },
);

使用していた箇所のみ取り外しid_generator済みです。


現在、このモジュールの唯一の既知のユーザーid_generatorは、将来の動作に効果的に設定するコード ref に設定します。モジュールの古いバージョンでのみこれを行うように変更しまし
( まだ発売されていない )

package Games::Lacuna::Client::RPC;
...
use Moose;

extends 'JSON::RPC::LWP';
...

has '+id_generator' => (
  default => sub{sub{1}},
);
4

2 に答える 2

3

これを行う別の方法があります!MooseX::Deprecatedを使用してください:-)

with "MooseX::Deprecated" => {
   attributes => [ "id_generator" ],
};

この質問に対する以前の回答に触発されて、MooseX::Deprecated を書きました。メソッド修飾子の適用、init_args のチェック、%Carp::Internalおよびの操作をwarnings::enabledすべて 1 つのきちんとした小さなパッケージにカプセル化します。

于 2013-10-29T14:27:05.143 に答える