Курс по Raku / Регулярни изрази и граматики / Граматики / Класове за действия / Exercises / Направете датата четима за човек
Решение: Направете датата четима за човек
Ето едно възможно решение на задачата.
Код
grammar Date {
token TOP { <year> '-' <month> '-' <day> }
token year { \d ** 4 }
token month { \d ** 2 }
token day { \d ** 2 }
}
class Humanise {
method year($/) { make $/.Int }
method month($/) { make <January February March April May June
July August September October November December>[$/ - 1] }
method day($/) { make $/.Int }
method TOP($/) { make "{$<day>.made} {$<month>.made} {$<year>.made}" }
}
say Date.parse('2026-07-05', actions => Humanise.new).made;🦋 Намерете програмата във файла humanise-a-date.raku.
Изход
5 July 2026Коментари
За разлика от обикновено аритметично действие, методите на токените създават стойности от различни видове:
yearиdayсъздават цели числа, аmonthсъздава низ, използвайки числовата си стойност като индекс в списък с имена на месеци.$/ - 1превръща двуцифреното съвпадение в число (07→7) и го измества към индекс от нула, така че месец07създаваJuly.Методът
TOPизобщо не преглежда суровия текст. Той просто прочита трите стойности, които подметодите вече са създали —$<day>.made,$<month>.made,$<year>.made, — и ги вмъква в крайния низ. Прочитането на5обратно отdayзаодно безплатно маха водещата нула.Това е ежедневната работа на класа за действия: разбираш структурирания вход веднъж, а после оставяш всеки метод да превърне своето парче в онова, което е нужно на останалата част от програмата.
Навигация в курса
← Направете датата четима за човек | Функционално, паралелно, реактивно и уеб програмиране →