首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >包限定名。Package::<&var>与&Package::var之间的差异(如果有)?

包限定名。Package::<&var>与&Package::var之间的差异(如果有)?
EN

Stack Overflow用户
提问于 2019-06-10 18:52:16
回答 2查看 161关注 0票数 7

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

代码语言:javascript
复制
Foo::Bar::<$quux>; #..as an alternative to Foo::Bar::quux;

作为参考,本文档中使用的包结构为:

代码语言:javascript
复制
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;
    }
}

同一页面指出,这种限定方式不适用于访问上面列出的Foo::Bar包中的&zape

(这不适用于&zape变量)

然而,如果我尝试:

代码语言:javascript
复制
Foo::Bar::<&zape>;  # instead of   &Foo::Bar::zape;

它可以很好地解决问题。

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

EN

回答 2

Stack Overflow用户

发布于 2019-06-11 03:05:17

我不知道有什么不同,但Foo::Bar::<&zape>也可以修改为使用{}而不是<>,然后可以与文字以外的其他东西一起使用,如下所示:

代码语言:javascript
复制
my $name = '&zape';
Foo::Bar::{$name}()

代码语言:javascript
复制
my $name = 'zape';
&Foo::Bar::{$name}()
票数 5
EN

Stack Overflow用户

发布于 2019-06-11 00:54:57

Package::<&var>和&Package::var没有区别。

代码语言:javascript
复制
package Foo { our $var = "Bar" };
say $Foo::var === Foo::<$var>; # OUTPUT: «True␤» 

subs也是如此(当然):

代码语言:javascript
复制
package Foo { our &zape = { "Bar" } };
say &Foo::zape === Foo::<&zape>;# OUTPUT: «True␤»

文档(有点令人困惑)试图说明的是,包范围的变量只有在使用我们的声明时才能被访问。有两个zape,其中一个有词法作用域(默认情况下subs有词法作用域),所以你不能访问那一个。我已经在文档存储库中提出了this issue,并将尝试尽快修复它。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56524991

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档