在参考这个问题/答案时,perl6 multi默认为sub.
No such method <name> for invocant of type <class>
我原以为它默认为方法.有人可以解释一下这个理由吗?
解决方法
sub可以出现在任何地方,默认为词法作用域规则(my).
方法通常仅在类定义中发生,并且默认为作用域(has).
方法通常仅在类定义中发生,并且默认为作用域(has).
my multi sub foo (){…} multi foo (){…} # identical my multi method foo (){…} # must be forced to my declaration class :: { my multi sub foo (){…} multi foo (){…} # identical has multi method bar (){…} multi method bar (){…} # identical } sub :: () { my multi sub foo (){…} multi foo (){…} # identical my multi method foo (){…} # must be forced to my declaration } method :: () { my multi sub foo (){…} multi foo (){…} # identical my multi method foo (){…} # must be forced to my declaration }
由于sub可以,并且确实在任何地方出现,因此对于multi来说意味着sub而不是方法更有意义.
虽然您可能认为多重意义在类定义中暗示一个方法;这将使得多元意味着两种不同的东西(第二次)取决于上下文.它会暗示我的子类在类之外,并且在类中有方法. (它也会回到我在类里面的方法里面.)
那将是一个特例. Perl 6的设计目标之一是减少特殊情况的数量.