#operators #raku
#операторы #raku
Вопрос:
Стандартный способ определения нового оператора в Raku
multi sub infix:<operator> ($l, $r) { ... }
С различными параметрами вместо инфикса. Однако я хотел бы определить пользовательский мета оператор. Самое близкое, что я могу придумать (соответствующее идее @a X @b), это
multi sub prefix:<F> (amp;bar) { ... }
Но пока он компилируется, единственный способ заставить его работать, например, с
оператором, — это использовать полный идентификатор:
(Famp;infix:< >)($a, $b)
Или метаоператоры можно определить?
Комментарии:
1. Этот вопрос задан в отношении reddit.com/r/rakulang/comments/iii0i5 /… . Основываясь на моем чтении
metaops
файла вcore.c
, они выглядят очень не определяемыми без сленга, но я не знаю, является ли это долгосрочной целью, или они будут оставлены на сленге.
Ответ №1:
В настоящее время вы не можете определить пользовательские метаоператоры в Raku.
Возможно, вы сможете заставить его работать с помощью сленга, но с кодом, специфичным для Rakudo, а сленги не очень хорошо документируются — лучшее, что вы можете сделать, это учебные пособия и примеры Google, docs.raku.org о них ничего не говорится 🙁
Комментарии:
1. Это то, что я предполагал, но решил, что задам вопрос от имени redditer, просто чтобы быть уверенным. Вероятно, нет причин, по которым метаоператоры не могут быть легко определены пользователем, но у них есть всевозможные странные способы взаимодействия с кодом. Например, у вас может быть префиксный метаоператор, но комбинированный metaop op функционирует как инфикс. Или
[ ]
, где это исправление по окружности относительно основной операции, которая должна быть infx (но может содержать другие метаоператоры), а вся комбинация действует как своего рода префикс / sub.2. С точки зрения грамматики / действий для Rakudo, это взаимодействие, вероятно, не слишком сложно определить, но вопрос в том, как вы определяете op. может быть
multi sub metaop:circumfix<[ ]>:acts-as<prefix> (amp;main-op where amp;infix)
или что-то подобное для сокращения metaop