.match
- поиск иглы в одной строке сена.Бесконечная последовательность преобразуется в '...'
.
say (1,3 ... 9).Str; # 1 3 5 7 9
say (1,3 ... 9).match: '1'; # 「1」
say (1,3 ... *).Str; # ...
say (1,3 ... *).match: '.'; # 「.」
Как я с этим справился
Во-первых, вы смотрите на неправильное определение метода:
method match(Any:U: |) { ... }
Any:U
в некотором роде похож на Any $ where not .defined
, за исключением того, что если оно совпадает, вы получите сообщение об ошибке «Параметр» »подпрограммы« match »должен быть объектом типа типа« Любой », а не экземпляром объекта ...».
Но вы передаете определенный Seq
.Таким образом, ваши .match
вызовы не отправляются на определение метода, который вы просматриваете.
Чтобы узнать, к чему отправляет метод, используйте:
say (1,3 ... *).^lookup('match').package ; # (Cool)
A определенный Seq
будет таким образом отправлять код Cool
:
method match(Cool:D: |c) {
...
self.Stringy.match(|c)
}
Итак, следующий:
say (1,3 ... *).^lookup('Stringy').package ; # (Mu)
И код :
multi method Stringy(Mu:D $:) { self.Str }
Итак, проверьте:
say (1,3 ... *).Str; # ...
Бинго.
И подтвердите:
say (1,3 ... *).match: '.'; # 「.」