2

perlを学ぶ私は最近、ムースの素晴らしさを発見しました!

修飾子に頭を悩ませようとしています-または少なくとも戻り値がどのように処理されるか...それらはどこかに保存されますか?

{package Util::Printable;

use Moose::Role;

  requires 'to_str','init';

  before 'to_str' => sub {
      my($self) = @_;
      $self->{to_string} = "my string thing";
      return $self->{to_string}; 
  };

  after 'init' => sub{
    my($self) = @_;
    $self->{roles} = __PACKAGE__;
    $self->{is_printable} = 1;
  };


}
1;
__END__ 

印刷可能な役割の使用

{package MonkeyPrint;
use Moose;

with 'Util::Printable';


  sub init{
    my($self) = @_;
    return 1;
  };

  sub BUILD{
    my($self) = @_;
    $self->init();  
  }


  # ------------------------------------------------------------------------ # 
  # Printable Support
  # ------------------------------------------------------------------------ #
  use overload '""' => 'to_str';  

  sub to_str {
      my($self) = @_;
      $self->{to_string} = __PACKAGE__;
      return $self->{to_string}; 
  };


 __PACKAGE__->meta->make_immutable;
}
1;
__END__ 
4

1 に答える 1

6

メソッドにbeforeafterラッパーがあるとします。

  1. beforeコードが呼び出されます。
  2. その戻り値は無視/破棄されます。
  3. 元のメソッドが呼び出されます。
  4. その価値は保存されます。
  5. afterコードが呼び出されます。
  6. その戻り値は無視/破棄されます。
  7. 保存された値が返されます。

around元のメソッドによって返される値を変更または置換する必要がある場合に使用します。

于 2011-09-13T22:14:38.243 に答える