包名前的关键字“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”有啥作用?的主要内容,如果未能解决你的问题,请参考以下文章

“as”关键字有啥作用?

SwiftUI `@State` 关键字有啥作用?

PHP中的关键字“callable”有啥作用

static关键字的作用

函数基础2

函数签名中变量名前的 * 和 ** 是啥意思? [复制]