作者CindyLinz (Cindy Wang)
看板Perl
标题Re: [情报] 作了个 Return::Deep 模组
时间Tue Apr 14 21:10:25 2020
Return::Deep 再加了两组功能:
第一组是指定 symbol return 好几层出去的 sym_ret($symbol, @return_values) 和
用来挡下 sym_ret 的 ret_bound {......} $catcher。
$catcher 如果没指定的话会挡下所有的 sym_ret;
如果是一个字串的话会挡下以同一个字串为 $symbol 的 sym_ret;
如果是一个 regex 的话会挡下可以 match 的 $symbol。
如果 symbol 自己约定好特定的规则,搭配 regex 可以作成阶层式的 exception,
但灵活性更高,甚至可以作成 tag 式的 exception。
另一组是 deep_wantarray($depth) 与 sym_wantarray($symbol)
对应 Perl 原生的 wantarray 功能,这是 Perl 的特色 context-sensitive 功能,
可以在真的 return 出去以前,
先探知要接 return 的 caller 想接的是纯量还是向量,或是什麽都不接。
※ 引述《CindyLinz (Cindy Wang)》之铭言:
: 抗疫连假窝在家里写程式,写了一个 perl 模组
: 功能是可以指定层数,一次 return 出好几层函数的「深return」XD
: return 出 eval block 的时候也适用
: cpan https://metacpan.org/pod/Return::Deep
: github https://github.com/CindyLinz/Perl-Return-Deep
: use Return::Deep;
: sub a {
: b();
: # never goes here
: }
: sub b {
: deep_ret(2, 'Hi', 42);
: }
: my @ret = a();
: # got ('Hi', 42) here
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 1.171.152.79 (台湾)
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/Perl/M.1586869827.A.4FE.html
※ 编辑: CindyLinz (1.171.152.79 台湾), 04/14/2020 21:11:58
1F:推 herculus6502: 刚好在 python 遇到相同问题,推 04/15 12:12