Я пришел к выводу, что вы не можете (по крайней мере, в обозримом будущем). Поэтому я сделал шаг назад, чтобы увидеть, чего я на самом деле хотел достичь. И , что оказалось возможным:
my role A[::T] {
method foobar() { T }
}
my class B {
method foobar() { Mu }
method ^parameterize(Mu \base, Mu \type) {
my \what := base.^mixin(A[type]);
what.^set_name(base.^name ~ '[' ~ type.^name ~ ']');
what
}
}
dd B.foobar; # Mu
dd B[Int].foobar; # Int
Метод foobar
по умолчанию предоставляется классом B
. Если один параметризует класс B
, он будет смешан с другой версией метода foobar
(который затеняет оригинальный метод), который возвращает тип, заданный параметризацией.
В конце концов, это дало мне основу для возможности параметризации QuantHash
es, давнего моего собственного запроса и недавно других.