Что такое оператор at ("@") в Pharo? - PullRequest
3 голосов
/ 23 апреля 2020

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

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

Ответы [ 2 ]

3 голосов
/ 23 апреля 2020

В Smalltalk символ @ используется для создания экземпляров класса Point. Экземпляр такого класса имеет два ивара 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 или путем настройки синтаксического анализатора.

1 голос
/ 27 апреля 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
...