Приоритет возврата Smalltalk

Я хотел бы получить небольшое разъяснение о приоритете оператора return, который, похоже, противоречит общим правилам приоритета.

Например, выражение

^ 2 + 3. 

возвращает 5 (это то, что я хочу), но не должен ли он возвращать только 2, поскольку унарные операторы, из которых ^ один, имеют более высокий приоритет над +, который является двоичным?.


person Jatajuuf    schedule 19.06.2011    source источник


Ответы (3)


В Smalltalk нет «унарных операторов». Существует только 3 уровня приоритета: унарные сообщения («сообщение получателя»), бинарные операторы («получатель + аргумент») и сообщения с n-арными ключевыми словами («сообщение получателя: аргумент1»). Во всех случаях получатель на первом месте.

Таким образом, «^» не является оператором, а указывает на оператор возврата. Точно так же в «-4» «-» является не оператором, а частью числового литерала.

person Vanessa Freudenberg    schedule 19.06.2011
comment
Так что у меня было это задом наперед, я продолжал думать, что ^ было сообщением, которое нужно отправить 2. Спасибо, это прояснило. - person Jatajuuf; 19.06.2011
comment
^ - это сообщение, отправляемое в thisContext, если вы думаете об этом (или родительском thisContext) ^^ - person mathk; 21.06.2011
comment
Обратите внимание, что до писка 3.9 пробел принимался в отрицательных литеральных числах, например - 3. Это было удалено, потому что не документировано и является источником путаницы, поскольку его можно было рассматривать как унарный оператор. - person aka.nice; 14.06.2012

Символ возврата ^ — одна из немногих встроенных конструкций языка. Smalltalk вернет значение выражения, следующего за символом ^.

person SHODAN    schedule 19.06.2011
comment
не совсем: [...] выражения ›› ‹‹ после символа ^ - person blabla999; 23.06.2011
comment
Это имеет больше смысла, да :) Отредактировано. - person SHODAN; 18.07.2011

Действительно ли Smalltalk's ^ является оператором? Я предполагаю, что это скорее зарезервированный символ. А что должно произойти с "болтающимся" +3 потом, когда метод окружения вернулся? Я думаю, что поведение правильное, так как оператор return является последним оператором, который происходит в «нормальном» методе Smalltalk.

С Уважением

person Nico    schedule 19.06.2011
comment
Я имел в виду взаимозаменяемость операторов/методов. Поведение правильное, но я хотел бы знать, как определяются правила приоритета для ^ и рассматривается ли оно как особое или нет. - person Jatajuuf; 19.06.2011