module - 可以在 Raku 中导出子集吗?
问题描述
我想定义一些子集,我还向其中添加一些约束和一些die
用于一些有用错误消息的语句。我不想在使用这些子集的模块的顶部定义它们,而是想将它们放在另一个模块中,同时不使用它们的完全限定名称 (FQN)。例如,我有
unit module Long::Module::Subsets;
subset PosInt
where ($_ ~~ Int || "The value must be an integer")
&& ($_ > 0 || "The value must be greater than 0")
is export
;
# other subsets ...
但得到了
===SORRY!=== Error while compiling /tmp/637321813/main.pl6
Two terms in a row ...
那行不通,我想我可以改为执行以下操作,但我想知道是否可以避免这样做:
use Long::Module::Subsets;
unit Long::Module;
my constant PosInt = Long::Module::Subsets::PosInt;
my constant Byte = Long::Module::Subsets::Byte;
# ... more subsets here
# ... some code here
my PosInt $age;
解决方案
子集确实可以导出。这里的问题是该is export
特征没有正确应用于PosInt
子集(以及您可能还希望导出的任何其他子集);该特征必须在定义新类型之后立即应用,并且在使用 引入的任何约束之前where
。通过正确应用特征:
unit module Long::Module::Subsets;
subset PosInt is export
where ($_ ~~ Int || "The value must be an integer")
&& ($_ > 0 || "The value must be greater than 0")
;
# other subsets ...
以下应该可以正常工作:
use Long::Module::Subsets;
unit Long::Module;
# ... some code here
my PosInt $age;
推荐阅读
- javascript - chrome如何确定SVG大小
- typescript - Nestjs 验证管道不适用于 Graphql
- python - Django Makemigrations 不适用于具有 AppConfig 的应用程序的 ForeignKey 字段
- javascript - 如何使用自定义函数在流利的 ui 标签选择器中生成建议
- php - 仅工作默认控制器索引。其他功能不起作用或我的路线错误?
- c# - 如何查看护照号码是否存在?
- reactjs - 无限循环反应表
- c# - C#访问方法并发
- asp.net-core - 更改 ASP.NET Core MVC 应用程序上客户端验证的默认区域性
- next.js - 使用 NextJS 处理电子商务的上一个会话的最佳方法