Преобразование строки в символ и обратно

июня 18, 2008

Строки и символы можно преобразовывать друг в друга с помощью методов to_str и to_sym:
а = “foobar”
b = :foobar
a == b.to_str   # true
b == a.to_sym   # true
Для метапрограммирования иногда бывает полезен такой метод:
class Symbol
def +(other)
(self.to_s + other.to_s) .to_sym
end
end
Он позволяет конкатенировать символы (или дописывать строку в конец символа). Ниже приведен пример использования; мы принимаем на входе символ [...]

Читать далее →

Символы, переменные и методы

июня 18, 2008

Наверное, чаще всего символы применяются для определения атрибутов класса:
class MyClass
attr_reader :alpha, :beta
attr_writer :gamma, -.delta
attr_accessor :epsilon
# …
end
Имейте в виду, что в этом фрагменте на самом деле исполняется некий код. Например, attr_accessor использует имя символа для определения имени переменной экземпляра, а также методов для ее чтения и изменения. Это не означает, что всегда имеется точное соответствие между [...]

Читать далее →

Символы как метазначения

июня 18, 2008

Мы нередко пользуемся исключениями, чтобы уйти от кодов возврата. Но никто не мешает возвращать коды ошибки, если вам так хочется. К тому же в Ruby метод может возвращать более одного значения.
В таком механизме часто возникает необходимость. Когда-то символ NUL кода ASCII вообще не считался символом. В языке С есть понятие нулевого указателя (null), в Pascal [...]

Читать далее →

Символы как перечисления

июня 18, 2008

В языке Pascal и в поздних версиях С есть понятие перечисляемого типа. В Ruby ничего подобного быть не может, ведь никакого контроля типов не производится. Но символы часто используются как мнемонические имена; стороны света можно было бы представить как :north, :south, :east и :west.
Быть может, немного понятнее хранить их в виде констант:

North, South, East, West [...]

Читать далее →

Символы

июня 18, 2008

Символ в Ruby - это экземпляр класса Symbol. Синтаксически он обычно обозначается двоеточием (:), за которым следует идентификатор.
Символ похож на строку, он тоже соответствует последовательности символов. Отличие от строки состоит в том, что у каждого символа есть только один экземпляр (как и в случае с объектами Fixnum). Следовательно, имеет место проблема потребления памяти или производительности, [...]

Читать далее →

Символы и диапазоны

июня 18, 2008

Я слышу и забываю. Я вижу и запоминаю. Я делаю и понимаю.
Конфуций
Символы и диапазоны - объекты, весьма характерные для языка Ruby. Они рассматриваются в одной главе не потому, что тесно связаны между собой, а потому, что сказать о них можно не так уж много.
Концепцию символа в Ruby понять непросто. Они напоминают «атомы» в языке Lisp. [...]

Читать далее →