Введение в ООП
Строки
Другим столь же распространенным классом является класс 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.