使子模块中的导出函数可以在 Raku 的全局命名空间中访问
我创建了一个名为 new
的最小工作模块。文件夹结构链接如下:
new
│ .gitignore
│ Changes
│ dist.ini
│ LICENSE
│ META6.json
│ README.md
│
├───lib
│ │ new.rakumod
│ │
│ ├───Desc
│ │ Mean.rakumod
│ │
│ └───Deviation
│ DeviationMean.rakumod
│
└───t
01-basic.rakutest
我有两个函数,中的
和Desc::Mean.rakumod
中的meanDeviation::DeviationMean.rakumod
模块中的deviation_from_mean
lib
。
这些是简单的函数,我不想为它们定义任何命名空间。因此,当我安装此模块并尝试通过 use new
使用此模块时,我希望能够访问这两个函数而不调用它们的子模块名称。
我想做的是(现在不起作用)
use new;
my @test1 = [6,6,4,6,8,6,8,4,4,6,6,8,8,8,8,8,8,4,4,4,4,8,8,8,8,4,4,4,8,6,8,4];
say mean(@test1);
say deviation_from_mean(@test1);
而不是(有效)
use new;
use Desc::Mean;
use Deviation::DeviationMean;
my @test1 = [6,6,4,6,8,6,8,4,4,6,6,8,8,8,8,8,8,4,4,4,4,8,8,8,8,4,4,4,8,6,8,4];
say mean(@test1);
say deviation_from_mean(@test1);
有办法做到这一点吗?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
粗略地说&遵循docs,您可以将这些方法名称作为导出放入
new命名空间(在new.rakumod中):
Roughly speaking & following the docs you can put these method names as exports into the
new
namespace like this (in new.rakumod):注意:
sub EXPORT { ... }
new 模块中的 a> 必须位于unit module new;
语句之前。根据需要在
其他模块(例如EXPORT
子中使用Deviation::DeviationMean
)来导入这些模块将模块的符号放入new
组件中;return ::.pairs.grep(*.key ne '$_').Map;
将重新导出它们的所有符号到任何使用< /code>s
新
。有关上述内容的解释,请参阅:
jnthn 对在模块中像 Prelude 模块一样使用 Haskell< /a>.
导入符号到包中,然后然后重新导出它们”部分="https://stackoverflow.com/a/69018308/1077672">我对将类的运算符定义与其他文件分离并使用它们的回答。
Notes:
The
sub EXPORT { ... }
in thenew
module must come before theunit module new;
statement.use
further modules (egDeviation::DeviationMean
) as desired in theEXPORT
sub to import those module's symbols into thenew
compunit; thereturn ::.pairs.grep(*.key ne '$_').Map;
will then re-export all their symbols to whateveruse
snew
.For an explanation of the above see:
jnthn's answer to Use Haskell like Prelude modules in a module.
The "Importing symbols into a package and then re-exporting them" section of my answer to Separating operator definitions for a class to other files and using them.