为什么perl6 multi默认为sub?

前端之家收集整理的这篇文章主要介绍了为什么perl6 multi默认为sub?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
在参考这个问题/答案时,perl6 multi默认为sub.

No such method <name> for invocant of type <class>

我原以为它默认为方法.有人可以解释一下这个理由吗?

解决方法

sub可以出现在任何地方,默认为词法作用域规则(my).
方法通常仅在类定义中发生,并且默认为作用域(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的设计目标之一是减少特殊情况的数量.

猜你在找的Perl相关文章