date - Dateish 字符串的问题
问题描述
此代码(用于检查当前目录的更改时间戳):
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
混合,字符串很简单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
有几个属性,方法使用这些属性来计算它们的返回值。
当你这样做时$some-string but Dateish
,你没有做任何事情来初始化属性,因此使用它们的方法调用(可能间接地)以有趣的方式失败。
你如何Dateish
从一个那里得到一个对象DateTime
?好吧,DateTime
已经是一个,或者Date
如果这是你想要的,你可以强制:
my $date = ".".IO.changed.DateTime.Date; say $date
您也可以尝试通过提供所有属性来实例化 a ,但我认为与按预期Dateish
使用相比没有任何优势。Date
推荐阅读
- r - 闪亮的 UI 小部件
- typescript - vscode.commands.executeCommand("vscode.diff) - 我如何让它等待?
- python - 基于多个条件的切片 DataFrame
- java - 在类路径中找不到任何功能:/cucumberOptions
- javascript - IE11 的 Swiper v4 转换失败(使用 Webpack 5 + Babel 7)
- php - 如何将此功能“移动”到我的子主题,以便更改一些参数?
- javascript - Chart.js 具有可滚动溢出的图表的最小宽度
- c# - Unity 2D:我怎样才能翻阅特定的场景序列,而不丢失我的分数数据然后检索我的分数数据?
- javascript - 确定溢出容器“tabindex”中的键盘选项卡位置
- java - 关于使用 Java 的 Kafka Producer