加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

perl – 将块传递给Moose方法

发布时间:2020-12-15 21:45:37 所属栏目:大数据 来源:网络整理
导读:是否有可能将块传递给Moose方法?在标准的Perl中,我可以使用这样的原型定义一个函数 sub fn () { my $code ={shift @_}; $code-();} 然后将一个块传递给函数而没有明确的子引用,即fn {say“Hi there,world”}. 我认为这只有在子程序是第一个参数的情况下才
是否有可能将块传递给Moose方法?在标准的Perl中,我可以使用这样的原型定义一个函数
sub fn (&) {
    my $code =&;{shift @_};
    $code->();
}

然后将一个块传递给函数而没有明确的子引用,即fn {say“Hi there,world”}.

我认为这只有在子程序是第一个参数的情况下才有可能,因为这总是带有Moose方法的$self,它似乎不可能存在,迫使我以更明确的方式做到这一点:

sub wrapper {
    my ($self,$code) = @_;
    $code->()
}

Wrapper->wrapper(sub { say "Hi there,world" });

现在,这将是一个非常方便的方式来包装一些块,即提供一些额外的文本或有条件地执行代码或围绕一些代码,其中错误处理保持不变(例如,eval一些代码和日志错误,记录用户等. ).

如果我没有遗漏某些东西,是否有一些半便捷的解决方法或替代方法来实现这样的事情而没有太多的线路噪音?

解决方法

看一下 PerlX::MethodCallWithBlock CPAN模块,该模块使用Perl语法(通过 Devel::Declare模块),允许您在方法调用后放置一个块.

例如:

use 5.016;
use warnings;
use PerlX::MethodCallWithBlock;

{
    package Foo;
    use Moose;

    sub bar {
        my ($self,$code) = @_;
        $code->();
    }
}

Foo->bar { say "Hi there world" };

该模块作为概念证明发布.到目前为止,我没有问题,但YMMV.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读