package - 包限定名称。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;
它解决得很好。
我是否误解了文件或完全错过了所提出的观点?例如,代码引用变量与标量“不起作用”背后的逻辑是什么?
解决方案
我不知道差异,但Foo::Bar::<&zape>
也可以修改为使用{}
而不是<>
,然后可以将其与文字以外的其他内容一起使用,如下所示:
my $name = '&zape';
Foo::Bar::{$name}()
或者
my $name = 'zape';
&Foo::Bar::{$name}()
推荐阅读
- azure - Azure Blob 存储仅使用文件名,而不是整个路径
- here-api - HERE 地图完全渲染时的哪个事件?
- excel - 使用适用于任何匹配项的 vba 在 excel 中自定义函数
- java - 根据用户选择的选项在另一个类中使用字符串
- linux - 给定原始哈希和复制文件的第二个目录,对复制的文件进行 MD5 检查
- javascript - 使用 PHP 将包含 JavaScript 对象的字符串转换为 JSON 字符串
- java - 如何修复未在 Intellij 中设置的 TERM 环境?
- python - 权重随时间变化的时间序列的加权平均值
- bioinformatics - 如何从 Profile Hidden Markov .hmm 文件中提取整个文本块
- java - Spring RestTemplate 处理异常