Многократная отправка работает в два этапа:
- С учетом количества позиционных параметров и их типов
- Если есть какие-либо условия
where
, именованные параметры или субподписи, выполните тестовую привязку подписи, чтобы проверить, соответствует ли она
Второй этап отклонит кандидата, если он не сможет связываться по какой-либо причине. Одна из таких причин, и я полагаю, что причина проблемы заключается в том, что значение по умолчанию неправильно введено. Например, в:
multi m(:@x = "not-an-array") { }
m()
Получаем ошибку:
Cannot resolve caller m(...); none of these signatures match:
(:@x = "not-an-array")
in block <unit> at -e line 1
Но изменив его на:
multi m(:@x = ["an-array"]) { }
m()
Работает нормально. (Обратите внимание, что хотя значение по умолчанию использует =
, на самом деле это привязка, а не присвоение.)
В случае в вопросе есть это:
MODEL :@models = TOXICITY
Глядя на источник модуля, из которого взят код, я вижу:
enum MODEL is export (
<TOXICITY SEVERE_TOXICITY TOXICITY_FAST IDENTITY_ATTACK
INSULT PROFANITY SEXUALLY_EXPLICIT THREAT FLIRTATION
ATTACK_ON_AUTHOR ATTACK_ON_COMMENTER INCOHERENT INFLAMMATORY
LIKELY_TO_REJECT OBSCENE SPAM UNSUBSTANTIAL>
);
Таким образом, TOXICITY - это просто Int
, но ожидается, что это типизированный массив значений MODEL
.
Таким образом, если вы сделаете это:
multi method submit(Str :$message!, MODEL :@models = Array[MODEL](TOXICITY)) {
Должно работать.