gpt4 book ai didi

module - Perl6 : use module inside other module

转载 作者:行者123 更新时间:2023-12-01 13:28:32 24 4
gpt4 key购买 nike

我有 4 个文件。

  • C:\perlCode2\start.pl6
  • C:\perlCode2\file0.pm6
  • C:\perlCode2\folder1\file1.pm6
  • C:\perlCode2\folder2\file2.pm6

  • start.pl6 用于运行我的程序。这 3 个模块文件包含或生成最终由 start.pl6 使用的数据。我使用 atom.io 来运行代码。

    这是代码:

    开始.pl6:
    use v6;
    use lib ".";
    use file0;
    use lib "folder1";
    use file1;
    use lib "folder2";
    use file2;

    say 'start';
    my $file0 = file0.new();
    say $file0.mystr;
    my $file1 = file1.new();
    say $file1.mystr;
    my $file2 = file2.new();
    say $file2.mystr;
    say 'end';

    文件 0.pm6:
    class file0 is export {
    has Str $.mystr = "file 0";

    submethod BUILD() {
    say "hello file 0";
    }
    }

    文件 1.pm6:
    class file1 is export {
    has Str $.mystr = "file 1";
    }

    文件 2.pm6:
    class file2 is export {
    has Str $.mystr = "file 2";
    }

    输出:
    start
    hello file 0
    file 0
    file 1
    file 2
    end
    [Finished in 0.51s]

    我不想在 start.pl6 中创建所有 3 个模块文件的实例,而是在 file1 中创建 file2 的实例,在 file0 中创建 file1 的实例。这样我只需要在 start.pl6 中创建一个 file0 的实例就可以看到相同的输出;

    以下是我想到的更改:

    文件 1.pm6:
    use lib "../folder2";
    use "file2.pl6";

    class file1 is export {
    has Str $.mystr = "file 1";

    submethod BUILD() {
    my $file2 = file2.new();
    $!mystr = $!mystr ~ "\n" ~ $file2.mystr;
    # I want to instantiate file2 inside the constructor,
    # so I can be sure the line
    # $!mystr = $!mystr ~ "\n" ~ $file2.mystr;
    # takes effect before i call any of file0's methods;
    }
    }

    文件 0.pm6:
    use lib "folder1";
    use "file1.pl6";

    class file0 is export {
    has Str $.mystr = "file 0";

    submethod BUILD() {
    say "hello file 0";
    my $file1 = file1.new();
    $!mystr = $!mystr ~ "\n" ~ $file1.mystr;
    }
    }

    在 file0 中,行
    使用库“文件夹1”;
    使用“file1.pl6”;
    产生此错误:
    ===SORRY!=== Error while compiling C:\perlCode2\file0.pm6 (file0)
    'use lib' may not be pre-compiled
    at C:\perlCode2\file0.pm6 (file0):2
    ------> use lib "folder1/file1.pl6"<HERE>;
    [Finished in 0.584s]

    我file1,行
    使用库“../folder2”;
    使用“文件2”;
    不起作用,但也没有给出错误。我只是得到输出:
    【0.31s完成】

    最后,文件 start.pl6 应该如下所示以产生输出:

    开始.pl6:
    use v6;
    use lib ".";
    use file0;

    say 'start';
    my $file0 = file0.new();
    say $file0.mystr;
    say 'end';

    输出:
    start
    hello file 0
    file 0
    file 1
    file 2
    end

    最佳答案

    你试图做的事情对我来说毫无意义。您似乎将这些模块任意放在文件夹中。

    如果这些模块的名称确实有意义,那么我可能会如何构建它。

    C:\perlCode2\start.pl6
    C:\perlCode2\lib\file0.pm6
    C:\perlCode2\lib\folder1\file1.pm6
    C:\perlCode2\lib\folder2\file2.pm6

    开始.pl6:

    use v6;

    END say "[Finished in {(now - $*INIT-INSTANT).fmt("%0.2fs")}";

    use lib 'lib';
    use file0;

    say 'start';
    my $file0 = file0.new;
    say $file0.mystr;
    say 'end';

    lib\file0.pm6:

    use folder1::file1;

    class file0 is export {
    has Str $.mystr = "file 0";

    submethod TWEAK() {
    say "hello file 0";
    $!mystr ~= "\n" ~ folder1::file1.new.mystr;
    }
    }

    lib\folder1\file1.pm6:

    use folder2::file2;

    class folder1::file1 is export {
    has Str $.mystr = "file 1";

    submethod TWEAK() {
    $!mystr ~= "\n" ~ folder2::file2.new.mystr;
    }
    }

    lib\folder2\file2.pm6

    class folder2::file2 is export {
    has Str $.mystr = "file 2";
    }

    关于module - Perl6 : use module inside other module,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47204912/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com