【问题标题】:Pass variables around the around method modifier在 around 方法修饰符周围传递变量
【发布时间】:2011-03-30 01:16:01
【问题描述】:

是否可以在多次调用aroundMethodModier 之间传递变量?示例(这不起作用,但希望能传达我想要做的事情)

sub mysub { ... };

around 'mysub' => sub {
   my $orig = shift;
   my $self = shift;

   my $value = get_value;

   $self->orig(@_);
};

around 'mysub' => sub {
   my $orig = shift;
   my $self = shift;
   my $value = shift;

   my $output
       = "sometext $value"
       . $self->orig(@_);
       . 'someothertext $value'
       ;
};

我最终希望将这些“周围”放置在可插入的特征中,在那里我不会真正知道预先加载了哪些,但最终输出将被整齐地格式化。

我的想法可能完全错误,因此欢迎提出其他建议。

【问题讨论】:

  • 使用实例变量怎么样?
  • @jmz 实例变量?
  • 喜欢$self->{value} = get_value; .... my $value = $self->{value};
  • @xenoterracide:MethodModifier 文档很清楚,顺序是 around2..around1...orig.
  • @jmz:“实例变量”我希望你的意思是属性。如果我在 Moose 模块中看到$self->{value} = ...,我会打程序员的耳光。 @xenoterracide:around 方法上的应用程序 LIFO 堆栈。

标签: perl moose method-modifier


【解决方案1】:

你试图做的事情没有逻辑。

"一个环绕修饰符接收 原始方法作为其第一个参数, 然后是对象,最后是任何 传递给方法的参数。”

https://metacpan.org/pod/Moose::Manual::MethodModifiers#BEFORE-AFTER-AND-AROUND

【讨论】:

    【解决方案2】:

    使用实例变量:

    $self->{value} = get_value;
    ...
    my $value = $self->{value};
    

    (查看问题评论以获得实际答案。我只是在这里重申,所以我可以接受答案,感谢:

    )

    【讨论】:

    • 附带说明一下,我最终并没有使用这种模式来实现,我只是放弃了这个目标。
    猜你喜欢
    • 1970-01-01
    • 2010-12-14
    • 1970-01-01
    • 1970-01-01
    • 2023-01-21
    • 1970-01-01
    • 2013-10-30
    • 2012-11-11
    • 1970-01-01
    相关资源
    最近更新 更多