私は4つのファイルを持っています。Perl6:他のモジュールの中でモジュールを使用
- C:\ perlCode2 start.pl6
- C \:\ perlCode2 file0.pm6
- C \:\ perlCode2 \ folder1のfile1.pm6
- C \:\ perlCode2 \フォルダ2 \ FILE2。 pm6
start.pl6は私のプログラムを実行するために使用されます。 3つのモジュールファイルには、start.pl6によって最終的に使用されるデータが含まれています。私はatom.ioを使ってコードを実行します。ここ
コードである:
start.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';
file0.pm6:
class file0 is export {
has Str $.mystr = "file 0";
submethod BUILD() {
say "hello file 0";
}
}
file1.pm6:
class file1 is export {
has Str $.mystr = "file 1";
}
file2.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内部、およびfile0内部FILE1 FILE2のインスタンスを作成します。この方法では、同じ出力を見るためにstart.pl6にfile0のインスタンスを作成するだけで済みます。
file1.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;
}
}
file0.pm6:ここ
は私が念頭に置いていた変化である
file0で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;
}
}
、ライン 使用libに " folder1 "; "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]
私は、ライン 使用libに」../folder2" ををfile1。 "file2"を使用します。 は動作しませんが、エラーは発生しません。
start.pl6:
use v6;
use lib ".";
use file0;
say 'start';
my $file0 = file0.new();
say $file0.mystr;
say 'end';
出力を生成するために最後に
[0.31sで仕上げ]、ファイルstart.pl6は次のようになります。私はちょうど出力を得ます出力:
start
hello file 0
file 0
file 1
file 2
end
あなたは '使用libに「../folder2/file2.pm6'と '使用のlib "フォルダ2/file2.pl6" を交換しようとしたことがあり"(' file1.pm6'の中で)? –
はい、奇妙なことに私はエラーを受け取りません。私は "[0.331で仕上げた]"を得る。 – Arimaafan