Введение в ООП
Строки
Другим столь же распространенным классом является класс String. К этому классу относятся произвольные строки символов, заключенные в апострофы или кавычки, например, 'hello', 'раз, два, три', "привет всем". Есть несколько альтернативных способов задания каждого из этих видов строк.
Для задания строки в апострофах можно использовать любой из способов представленных ниже.
puts 'hello' # hello puts %q/hello/ # hello puts %q(hello) # hello
Два подряд идущих символа \ внутри такой строки заменяются на один.
puts 'hell\\o' # hell\o puts %q(hell\\o) # hell\o
Для того чтобы внутрь строки, заключенной в апострофы, вставить апостроф, следует предварительно "экранировать" его символом \ (обратный слеш).
puts 'hell\'o' # hell'o puts %q(hell\'o) # hell\'o puts 'hel"l"o' # hel"l"o
Для создания строки, заключенной в кавычки, следует либо просто заключить ее в кавычки, либо использовать конструкции %Q или %, после которых указывается строка, обрамленная с двух сторон одним и тем же символом, отличным от цифр и букв (можно использовать также пару любых скобок). Ниже перечислено несколько способов задания строки "hello".
"hello" %Q/hello/ %Q{hello} %Q(hello) %Q!hello! %<hello> %(hello) %!hello! %*hello* %+hello+
puts "Say \"Hello\"" # Say "Hello"
Строка, заключенная в кавычки, позволяет интерпретировать последовательности символов, начинающиеся с символа \ такие, например, как \n (символ перехода на новую строку) и \t (табуляция). Другой особенностью строк, заключенных в кавычки, является возможность использования подстановки: если строка содержит некоторое выражение, ограниченное символами #{ и }, то оно заменяется на результат его вычисления. Добавьте в программу следующие строки и проанализируйте полученный вывод.
puts "a \t b"; puts 'a \t b' puts "выражение 3*5+8 равно #{3*5+8}" puts 'выражение 3*5+8 равно #{3*5+8}' puts "работа с целыми числами: 5/8 = #{5/8}" puts "перевод в класс Float: 5/8 = #{5/8.to_f}"
К строкам могут применяться методы to_i и to_f. При преобразовании к целому числу отбрасывается оставшаяся часть строки, как только встречается символ, отличный от цифры (исключение - знак плюс или минус в первой позиции строки). Аналогичные правила применяются и при преобразовании к дробному числу. Единственным отличием является то, что первая найденная точка рассматривается как разделитель между целой и дробной частями. Следующий фрагмент иллюстрирует сказанное:
puts "-12.34".to_i puts "12.34".to_f puts "+12:34".to_i puts "12qq34".to_f
Для получения строки, содержащей символ с заданным ASCII кодом, используется метод chr, например,
Следует помнить, что этот метод может быть применен только к положительному целому числу, не превышающему 255.
Класс String предоставляет большое число методов для работы со строками, некоторые из которых представлены в следующей таблице.
Отдельного упоминания заслуживает метод eval, позволяющий динамически выполнять другие методы. Этот метод анализирует переданную ему строку, рассматривая ее как часть программы, и выполняет ее. Обратите внимание, что при вызове этого метода используется не точечная, а функциональная форма записи:
puts eval("2**10") puts eval('"мол".size * "око".size') # 9
#!/usr/bin/env ruby puts 'hello' # hello puts %q/hello/ # hello puts %q(hello) # hello puts 'hell\\o' # hell\o puts %q(hell\\o) # hell\o puts 'hell\'o' # hell'o puts %q(hell\'o) # hell\'o puts 'hel"l"o' # hel"l"o puts "hello" puts %Q/hello/ puts %Q!hello! puts %Q{hello} puts %Q(hello) puts %Q!hello! puts %<hello> puts %!hello! puts %*hello* puts %+hello+ puts %(hello) puts "Say \"Hello\"" # Say "Hello" puts "Say 'Hello'" # Say 'Hello' puts "a \t b" puts 'a \t b' puts "выражение 3*5+8 равно #{3*5+8}" puts 'выражение 3*5+8 равно #{3*5+8}' puts "работа с целыми числами: 5/8 = #{5/8}" puts "перевод в класс Float: 5/8 = #{5/8.to_f}" puts "-12.34".to_i puts "12.34".to_f puts "+12:34".to_i puts "12qq34".to_f puts 209.chr puts "123456789".reverse puts " 123 " puts " 123 ".strip puts "---22--23****".squeeze('*-') puts "---22--23****".squeeze puts "Дашка любит молоко, а Танька - квас".tr('ДТ','МД') puts "22+33=55".tr('25','47') puts "abcdef"[0].chr puts "abcdef".chop puts "abcdef".chop.chop puts "abcdef".delete("ea") puts "abcdef".delete('a-c') puts "abcdefabcdef".length puts "12345678".size puts "ABCDEF".downcase puts "abcdef".index("cd") puts "abcdefabcdef".index("cd",3) a="12345" puts "12345"[3].chr puts "12345"[0..3] puts "12345"[0,3] puts "привет".capitalize # Не работает с русскими буквами! puts "abcdabcd".index("cd",3) puts "*"+"123".ljust(9)+*" puts "*"+"123".center(9)+"*" puts "*"+"123".rjust(9)+"*" puts (eval "2**10") puts (eval ""мол".size * "око".size') =begin s="2*3+4" puts s puts "#{s}" puts eval(s) puts eval s puts s.eval # Ошибка! Неправильный вызов метода print "Введите команды:" eval gets.chop! =endПример 1.3.