ФЭНДОМ


Символы - это тип данных в Smalltalk, очень похожий на строки.

Символ записывается как #someSymbol (решётка, записанная слитно со словом), например #top, #doesNotUnderstand.

Символ - это объект класса Symbol, являющегося потомком класса String. В отличии от строк, символы уникальны. То есть, два равных (эквивалентных) символа всегда идентичны друг другу: если aSymbol1 = aSymbol2, то и aSymbol1 == aSymbol2. Или, говоря другими словами, равенство символов можно проверит сравнением объектных указателей.

Именно из-за свойства "уникальности" символы очень активно используются в "низкоуровневом" программировании на Smalltalk (например, названия классов и методов - это символы). Например, при поиске метода ВМ ищет метод класса с селектором метода равным заданному. При этом нельзя сравнивать селекторы на равенство, так как это рекурсивно вызовет поиск метода #=. По-этому ВМ сравнивает идентичность селекторов.

Кроме того символы часто используются, когда в качестве параметра надо передать один из нескольких заранее определённых вариантов (например, #top или #bottom).

Довольно близким аналогом символов являются interned String в Java или символ LISP.