Dateish 字符串的问题
Problems with Dateish strings
此代码(用于检查当前目录的更改时间戳):
my $date = ".".IO.changed.DateTime.yyyy-mm-dd but Dateish;
say $date;
产生错误:
«Ambiguous call to 'gist(Str+{Dateish}: )'; these signatures all match:: (Str:D: *%_):(Dateish:D: │ avalenn
| *%_) in block <unit> at <tmp> line 1»
没有 Dateish
mix in,字符串就是 2018-05-12
。使用任何其他类型的 Dateish
函数,如 .week-year
也会产生不同的错误:
«Str+{Dateish}Invocant of method 'Bridge' must be an object instance of type 'Int', not a type │ a3r0
| object of type 'Int'. Did you forget a '.new'? in block <unit> at <tmp> line 1»
这是否仅仅意味着您不能将字符串与 Dateish 混用?我已经在几个小时内完成了类似的事情而没有问题。
要回答你的问题,我们应该看看那个角色:
my role Dateish {
has Int $.year;
has Int $.month; # should be int
has Int $.day; # should be int
has Int $.daycount;
has &.formatter;
...
multi method Str(Dateish:D:) {
&!formatter ?? &!formatter(self) !! self!formatter
}
multi method gist(Dateish:D:) { self.Str }
...
}
所以,角色 Dateish
有几个属性,方法使用这些属性来计算它们的 return 值。
当您执行 $some-string but Dateish
时,您没有执行任何初始化属性的操作,因此使用它们的方法调用(可能间接地)以有趣的方式失败。
那么如何从 DateTime
中获取 Dateish
对象呢?好吧,DateTime
已经是一个了,或者你可以强迫 Date
如果那是你想要的:
my $date = ".".IO.changed.DateTime.Date; say $date
您也可以尝试通过提供所有属性来实例化 Dateish
,但我看不出比按预期使用 Date
有任何优势。
此代码(用于检查当前目录的更改时间戳):
my $date = ".".IO.changed.DateTime.yyyy-mm-dd but Dateish;
say $date;
产生错误:
«Ambiguous call to 'gist(Str+{Dateish}: )'; these signatures all match:: (Str:D: *%_):(Dateish:D: │ avalenn
| *%_) in block <unit> at <tmp> line 1»
没有 Dateish
mix in,字符串就是 2018-05-12
。使用任何其他类型的 Dateish
函数,如 .week-year
也会产生不同的错误:
«Str+{Dateish}Invocant of method 'Bridge' must be an object instance of type 'Int', not a type │ a3r0
| object of type 'Int'. Did you forget a '.new'? in block <unit> at <tmp> line 1»
这是否仅仅意味着您不能将字符串与 Dateish 混用?我已经在几个小时内完成了类似的事情而没有问题。
要回答你的问题,我们应该看看那个角色:
my role Dateish {
has Int $.year;
has Int $.month; # should be int
has Int $.day; # should be int
has Int $.daycount;
has &.formatter;
...
multi method Str(Dateish:D:) {
&!formatter ?? &!formatter(self) !! self!formatter
}
multi method gist(Dateish:D:) { self.Str }
...
}
所以,角色 Dateish
有几个属性,方法使用这些属性来计算它们的 return 值。
当您执行 $some-string but Dateish
时,您没有执行任何初始化属性的操作,因此使用它们的方法调用(可能间接地)以有趣的方式失败。
那么如何从 DateTime
中获取 Dateish
对象呢?好吧,DateTime
已经是一个了,或者你可以强迫 Date
如果那是你想要的:
my $date = ".".IO.changed.DateTime.Date; say $date
您也可以尝试通过提供所有属性来实例化 Dateish
,但我看不出比按预期使用 Date
有任何优势。