Быстрые пользовательские операторы с объединением символов Unicode - PullRequest
1 голос
/ 08 марта 2020

TL; DR Можно ли уговорить компилятор принять символ объединения в качестве постфиксного оператора?

Ссылки на Swift.org и GitHub и этот полезный смысл предполагают, что объединение символов (например, U + 0300 и далее) может служить операторами в Swift.

При разумной реализации (здесь опущено) я могу сказать «Fiat Lux», и есть

prefix  operator ‖      // Find the norm.
postfix operator ‖      // Does nothing.
func             /      // Scalar division.

, который позволяет

let vHat = v / ‖v‖      // Readable as math.

или даже

let v̂ = v / ‖v‖        // Loving it.

OCD во мне хочет теперь использовать объединяющую окружность как (topfix) оператор, подобный этому:

let normalizedV = v̂  // Combining char is really a postfix.

Поэтому я прыгаю и пытаюсь написать:

postfix operator ^      // Want this to be *combining* circumflex.
postfix func ^(v: Vector) -> Vector { v / ‖v‖ }

и может сделать это с простым старым U + 005E круговым, но получаю (различные) ошибки компилятора, когда я пытаюсь комбинировать с круговым U + 0302.

enter image description here

1 Ответ

1 голос
/ 11 марта 2020

Имя оператора (или любой другой идентификатор) не может начинаться с символа U+0302. Как и все метки объединения, это разрешенный «оператор-символ», но не разрешенный «оператор-голова». От Лексическая структура> Операторы в «Языке программирования Swift»:

ГРАММА РАБОТЫ
оператор → оператор-символы оператора опт
...
символ оператора → U + 0300 – U + 036F

...