【发布时间】:2019-01-17 03:06:32
【问题描述】:
我正在寻找一些我的知识清理。在具有复杂模块结构的项目中,我想通过构建结构化命名空间树来保持结构清洁。比如说:
App
Config
Key
Node
Param
Type
MyType
App::Config 下的每个条目都应包含在其自己的文件中。总是输入像App::Config::Key 这样的东西是浪费时间。 is export 没有参数来声明要导出的名称。所以,我终于想到了以下解决方案:
Config.pm6:
unit module App::Config:ver<0.0.1>;
...
Key.pm6:
unit package App::Config;
class Key is export {
...
}
它可以按我的意愿工作:
use App::Config::Key;
say Key.^name; # App::Config::Key
唯一的问题是:有任何警告吗?有什么隐藏的副作用需要了解吗?
【问题讨论】:
-
我现在唯一能想到的是,如果你想确保任何
.perl输出将四舍五入,你应该不将类设为my-旅行。它将默认为our,因此如果您不指定任何内容,则应该在这方面找到您。 -
我能想到的只有与文档有关的事情。您需要提前知道,为了获得 Key 的文档,您需要查找 App::Config。此外,类本身的文档。查看文件结构可能并不明显,有哪些类可用。它们都没什么大不了的。
-
@jjmerelo,在这种情况下,
p6doc App::Config::Key将无法找到App/Config/Key.pm6中的文档,我是否理解正确? -
好的,从包中导出角色似乎无法正常工作。短名称可用,它适用于一个类。但是当测试
.^does(或~~)时,短名称未通过测试,而FQN通过了测试:对于class Foo does Role { ... },检查Foo ~~ Role === False但Foo ~~ App::Config::Role === True。必须报告问题。 -
在发表评论后的几个小时内完成:github.com/rakudo/rakudo/issues/2617
标签: raku