这很愚蠢,我知道显而易见的事情就是简单地以不同的方式命名该类,但我仍然很好奇。在类中ColumnType::Date
,我想typecast
返回一个 Raku 的Date
对象,而不是一个ColumnType::Date
:
module ColumnType {
class Date {
method typecast(Blob:D $value) {
my $date = $value.decode('ascii').trim;
my ($year, $month, $day) = $date.split('/');
return try Date.new: :$year, :$month, :$day;
}
}
}
my $blob = "1980/01/01".encode('ascii');
say ColumnType::Date.new.typecast($blob);
Run Code Online (Sandbox Code Playgroud)
换句话说,是否可以将 Raku's 引用Date
为完全限定的名称?
Eli*_*sen 10
是的。通过前缀CORE::
.
$ raku -e 'say CORE::Date =:= Date'
True
Run Code Online (Sandbox Code Playgroud)
编辑:
更一般地,您可以通过使用 来访问在词法上覆盖后在词法上可用的内容my constant
。在您的示例中,您还可以这样做:
module ColumnType {
my constant OriginalDate = Date;
class Date {
method typecast(Blob:D $value) {
my $date = $value.decode('ascii').trim;
my ($year, $month, $day) = $date.split('/');
return try OriginalDate.new: :$year, :$month, :$day;
}
}
}
Run Code Online (Sandbox Code Playgroud)
Date
这会将模块内类的可见性“保存”为OriginalDate
,然后您可以使用它来调用.new
。