": = "и приоритет двоичных сообщений в Smalltalk
Я пытаюсь изучить Smalltalk с помощью учебных пособий, включенных в Dolphin Smalltalk X6.
Мой вопрос касается оценки выражений с несколькими сообщениями.
Насколько я понимаю, сначала оцениваются простые сообщения, затем двоичные сообщения и, наконец, сообщения с ключевыми словами (за исключением кода в скобках). Однако у меня возникли проблемы с применением этого понимания ко второй строке в следующем примере (найденном в Dolphin Smalltalk учебное пособие ). playground := Playground new.
teresa := playground add: Triangle new. "Misunderstood code"
teresa class. "Evaluates to 'Triangle'"
Если бы мое понимание было правильным, то 2-я строка оценивалась бы так:
1. Simple message 'new' sent to Triangle, triangle object as response
2. Binary message ':=' with parameter 'playground' sent to 'teresa'.
3. Keyword message 'add:' with parameter 'triangle object' sent to 'teresa'.
4. teresa class. "evaluates to 'Playground'".
Мое непонимание заключается в том, как "Тереза" относится к анонимному объекту треугольника, а не к объекту игровой площадки, на который ссылается "игровая площадка".
Я искал второе объяснение оценки Smalltalk для упоминаний := или add: будучи частными случаями без успеха, и единственное другое объяснение, которое я могу придумать, - это фундаментальное недоразумение.
Кто - нибудь может помочь мне выпрямиться?
2 ответа:
While: = выглядит как двоичное сообщение, потому что в нем используются символы инфикса... это не. Это часть синтаксиса языка точно так же, как парены и точки (например).
Думайте о := как об операторе присваивания (иногда говорят как "получает"). Это не сообщение какого-либо приоритета. Он оценивается после отправки любого сообщения. Это значение lvalue должно быть прямой ссылкой на переменную (а не результатом отправки сообщения).
Оператор присваивания (:=) не является сообщением. (Он не передается объекту, вместо этого он указывает, что переменная должна быть установлена в значение). Его приоритет-последний общий.
Итак, что происходит:
- простое сообщение " new " отправить в треугольник, объект треугольника в качестве ответа
- ключевое слово message add: отправлено на игровую площадку, и есть соглашение, которое добавляет: сообщения отвечают на добавленный объект, которому этот объект, кажется, следует, поэтому вновь созданный треугольник возвращенный.
- переменная Тереза устанавливается в новый треугольник
- класс Терезы. "оценивает в треугольник".