包名前的关键字“unit”有啥作用?
Posted
技术标签:
【中文标题】包名前的关键字“unit”有啥作用?【英文标题】:What does the keyword 'unit' before a package name do?包名前的关键字“unit”有什么作用? 【发布时间】:2016-02-28 02:28:42 【问题描述】:在下面的代码中;
unit module Fancy::Calculator;
“单位”实际上是做什么的?我知道模块定义的范围变成了它声明的文件 - 而不是;
module Fancy::Calculator
# module definition statements here
范围显然是由卷曲定义的,但我在文档中看不到任何明确说明它所做的全部的内容,如果仅此而已,我会有点惊讶它确实做到了。其次,在做出这样的声明之后,是否可以在中途声明unit class Whatever
(类,模块,等等)并结束之前的范围定义?
【问题讨论】:
就是这样,请添加错误报告,或为github.com/perl6/doc创建拉取请求 Marty,你有没有就此提交过错误报告?该功能仍然没有记录,所以我想确保它在列表中。 【参考方案1】:来自评论者(感谢布拉德),看来这就是它所做的一切。至于在同一个文件中启动第二个模块 - 你不能再次使用单元模块 - 这会产生;
===SORRY!=== Error while compiling /home/user/Fancy/Calculator.pm6
Too late for unit-scoped module definition;
Please use the block form.
...但正如消息所述,您可以使用块形式,但您声明的任何内容都在单元模块命名空间内 - 在这种情况下为 Fancy::Calculator。所以这些;
unit module Fancy::Calculator;
# The following available to the module user as Fancy::Calculator::Adder
class Adder
method add "Hi... I am a method who can add"
# Starting definition of new module but its within Fancy::Calculator namespace
module Minus
# Following available to the module user as Fancy::Calculator::Minus::Subber
class Subber
method subtract "Hi... I am a method who can subtract"
# unless you add "is export" in which case its available by its short name
class Multiplyer is export
method times "Hi... I am a method who can multiply"
sub divide() is export "Hi... I am a sub who can divide"
这样访问;
# In main
use Fancy::Calculator;
my $fca = Fancy::Calculator::Adder.new;
say $fca.add; # Hi... I am a method who can add
my $fcms = Fancy::Calculator::Minus::Subber.new;
say $fcms.subtract; # Hi... I am a method who can subtract
my $mul = Multiplyer.new;
say $mul.times; # Hi... I am a sub who can multiply
say divide(); # Hi... I am a sub who can divide
【讨论】:
以上是关于包名前的关键字“unit”有啥作用?的主要内容,如果未能解决你的问题,请参考以下文章