Проблемы со строками даты - PullRequest
0 голосов
/ 12 мая 2018

Этот код (для проверки измененной временной метки текущего каталога):

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␤␤»

Означает ли это просто, что вы не можете смешивать строки с датой?Я сделал что-то подобное с часами без проблем.

1 Ответ

0 голосов
/ 12 мая 2018

Чтобы ответить на ваш вопрос, мы должны взглянуть на эту роль:

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, как задумано.

...