Чтобы ответить на ваш вопрос, мы должны взглянуть на эту роль:
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
Вы также можете попытаться создать экземпляр Dateish
, предоставив все атрибуты, ноЯ не вижу никаких преимуществ по сравнению с использованием Date
, как задумано.