Perl6:如何动态加载 class 模块?
Perl6: How to load a class module dynamically?
如何动态加载 OO 风格的模块?
#!/usr/bin/env perl6
use v6;
my $r = prompt ':';
if $r {
require Text::CSV; # Error:
my $csv = Text::CSV.new; # Could not find symbol '&CSV'
} else {
require File::Temp <&tempfile>;
my ( $filename , $filehandle ) = tempfile; # this works
}
如 perl6 doco here 中所述,您可以动态加载模块但是;
To import symbols you must define them at compile time.
因此,else
子句中的代码之所以有效,是因为明确要求导入 <&tempfile>
。
我能看到的最接近使 if
子句中的代码起作用的是这个(主要取自较早的 doco 参考):
use v6.c ;
sub load-a-module($name) {
require ::($name) ;
my $instance = ::($name).new() ;
return $instance ;
}
my $module = "Text::CSV" ;
my $csv = load-a-module $module ;
say $csv.WHAT ;
# say $csv.^methods ; # if you really want to be convinced
# outputs: (CSV)
如何动态加载 OO 风格的模块?
#!/usr/bin/env perl6
use v6;
my $r = prompt ':';
if $r {
require Text::CSV; # Error:
my $csv = Text::CSV.new; # Could not find symbol '&CSV'
} else {
require File::Temp <&tempfile>;
my ( $filename , $filehandle ) = tempfile; # this works
}
如 perl6 doco here 中所述,您可以动态加载模块但是;
To import symbols you must define them at compile time.
因此,else
子句中的代码之所以有效,是因为明确要求导入 <&tempfile>
。
我能看到的最接近使 if
子句中的代码起作用的是这个(主要取自较早的 doco 参考):
use v6.c ;
sub load-a-module($name) {
require ::($name) ;
my $instance = ::($name).new() ;
return $instance ;
}
my $module = "Text::CSV" ;
my $csv = load-a-module $module ;
say $csv.WHAT ;
# say $csv.^methods ; # if you really want to be convinced
# outputs: (CSV)