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

我可以在Perl 6中使用独立签名作为签名吗?

发布时间:2020-12-15 21:15:10 所属栏目:大数据 来源:网络整理
导读:我正在玩一个带有几个开关的命令行程序的Perl 6实现. MAIN的签名非常复杂,有点混乱.我想知道是否有办法在其他地方定义签名并告诉子程序使用什么: # possibly big and messy signaturemy $sig;BEGIN { $sig = :( Int $n,Int $m ) };multi MAIN ( $sig ) { pu
我正在玩一个带有几个开关的命令行程序的Perl 6实现. MAIN的签名非常复杂,有点混乱.我想知道是否有办法在其他地方定义签名并告诉子程序使用什么:
# possibly big and messy signature
my $sig;
BEGIN { $sig = :( Int $n,Int $m ) };

multi MAIN ( $sig ) {
    put "Got $n and $m";
    }

即使在MAIN编译之前设置了签名,MAIN也不会在签名中看到变量:

===SORRY!=== Error while compiling /Users/brian/Desktop/signature.p6
Variable '$n' is not declared
at /Users/brian/Desktop/signature.p6:7

我认为在编译时生成方法并根据各种因素选择签名可能很方便.

解决方法

简答:不

答案很长:仍然没有.如果可以的话,你会遇到各种各样的麻烦,因为你的例子中只有一个变量$n.如果您多次使用签名(或只使用一次签名,并递归到您附加到它的子例程中),则每个签名绑定都会覆盖该变量中的先前值,从而导致远处的某些怪异操作.根本没有机制来克隆自由浮动签名中涉及的变量.

解决方法就像在实际例程中使用match-all签名,然后使用它来绑定捕获到签名遭受同样的缺陷,因此恕我直言不值得麻烦.

也许在遥远的未来,一些非常先进的宏功能可能允许您移植签名,但我不认为宏观开发的一部分现在甚至在我们的路线图上.

您应该重用(可能是匿名的)附加了签名的例程,而不是重新使用裸签名,并使用您想要的名称安装它们,例如

sub f(Int $n,Int $m) {
    # do something sensible here with $n and $m
}
constant &MAIN = &f;
# reuse &f for more

(编辑:李大同)

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

    推荐文章
      热点阅读