Я поискал в Интернете значение оператора @
в Pharo, но ничего не нашел.
Что означает оператор Pharo @
? Например, почему 25@50
оценивается как "(25@50)"
?
Я поискал в Интернете значение оператора @
в Pharo, но ничего не нашел.
Что означает оператор Pharo @
? Например, почему 25@50
оценивается как "(25@50)"
?
В 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
или настройки синтаксического анализатора.
В 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