Что такое оператор at (@) в Pharo?

Я поискал в Интернете значение оператора @ в Pharo, но ничего не нашел.

Что означает оператор Pharo @? Например, почему 25@50 оценивается как "(25@50)"?


person asymmetryFan    schedule 23.04.2020    source источник
comment
@ не оператор, это сообщение, как и все остальное. Основа Smalltalk - сообщения, отправляемые объектам.   -  person John Pfersich    schedule 25.04.2020


Ответы (2)


В Smalltalk символ @ используется для создания экземпляров класса Point. Экземпляр такого класса имеет два ivar x и y. Вы можете создать Point, используя сообщение x:y:, как это

  Point x: 3 y: 4.

Однако менее многословно использовать сообщение @, подобное этому.

  3 @ 4

создать то же самое.

Обратите внимание, что, хотя x:y: - это сообщение, которое вы отправляете классу Point, сообщение @ 4 отправляется с целым числом 3. Другими словами, первое - это сообщение класса, второе - сообщение экземпляра.

Обратите внимание: поскольку многие люди пишут 3@4 вместо 3 @ 4, это может вызвать неожиданный побочный эффект. По факту

  3@-4

должен быть (в принципе) Point с координатами 3 и -4. Однако синтаксис Smalltalk отличается и будет анализировать его как сообщение с селектором @- и аргументом 4, отправленное получателю 3. Вот почему некоторые диалекты делают исключение, так что сообщение интерпретируется как 3 @ -4, что может быть достигнуто путем реализации метода @- в Number или настройки синтаксического анализатора.

person Leandro Caniglia    schedule 23.04.2020

В Pharo это метод, определенный в классе Number

@ y 
"Primitive. Answer a Point whose x value is the receiver and whose y 
value is the argument. Optional. No Lookup. See Object documentation 
whatIsAPrimitive."

<primitive: 18>
^Point x: self y: y
person Stephan Eggermont    schedule 27.04.2020