首页 > 解决方案 > 包限定名称。Package::<&var> 与 &Package::var 之间的差异(如果有的话)?

问题描述

通读https://docs.perl6.org/language/packages#Package-qualified_names它概述了具有以下语法的限定包变量:

Foo::Bar::<$quux>; #..as an alternative to Foo::Bar::quux;

作为参考,在文档中用作示例的包结构是:

class Foo {
    sub zape () { say "zipi" }
    class Bar {
        method baz () { return 'Þor is mighty' }
        our &zape = { "zipi" };   #this is the variable I want to resolve
        our $quux = 42;
    }
}

&zape同一页面指出,这种限定风格在上面列出的 Foo::Bar 包中无法访问:

(这不适用于 &zape 变量)

然而,如果我尝试:

Foo::Bar::<&zape>;  # instead of   &Foo::Bar::zape;

它解决得很好。

我是否误解了文件或完全错过了所提出的观点?例如,代码引用变量与标量“不起作用”背后的逻辑是什么?

标签: packageraku

解决方案


我不知道差异,但Foo::Bar::<&zape>也可以修改为使用{}而不是<>,然后可以将其与文字以外的其他内容一起使用,如下所示:

my $name = '&zape';
Foo::Bar::{$name}()

或者

my $name = 'zape';
&Foo::Bar::{$name}()

推荐阅读