Программирование на языке Ruby
Программирование на языке Ruby читать книгу онлайн
Внимание! Книга может содержать контент только для совершеннолетних. Для несовершеннолетних чтение данного контента СТРОГО ЗАПРЕЩЕНО! Если в книге присутствует наличие пропаганды ЛГБТ и другого, запрещенного контента - просьба написать на почту [email protected] для удаления материала
title2 = "The Call of the Wild"
# При стандартном сравнении было бы напечатано "yes".
if title1 < title2
puts "yes"
else
puts "no" # А теперь печатается "no".
end
Обратите внимание, что мы «сохранили» старый метод
<=>
alias
<
<=>
Отметим также, что оператор
==
<=>
Comparable
==
Допустим, что мы хотим сравнивать строки без учета регистра. Для этого есть встроенный метод
casecmp
class String
def <=>(other)
casecmp(other)
end
end
Есть и более простой способ:
class String
alias <=> casecmp(other)
end
Но это не все. Надо еще переопределить оператор
==
class String
def ==(other)
casecmp(other) == 0
end
end
Теперь все строки будут сравниваться без учета регистра. И при всех операциях сортировки, которые определены в терминах метода
<=>
2.8. Разбиение строки на лексемы
Метод
split
По умолчанию разделителем является пробел, а точнее, значение специальной переменной
$;
$FIELD_SEPARATOR
s1 = "Была темная грозовая ночь."
words = s1.split # ["Была", "темная", "грозовая", "ночь]
s2 = "яблоки, груши, персики"
list = s2.split(", ") # ["яблоки", "груши", "персики"]
s3 = "львы и тигры и медведи"
zoo = s3.split(/ и /) # ["львы", "тигры", "медведи"]
Второй параметр ограничивает число возвращаемых полей, при этом действуют следующие правила:
1. Если параметр опущен, то пустые поля в конце отбрасываются.
2. Если параметр — положительное число, то будет возвращено не более указанного числа полей (если необходимо, весь «хвост» строки помещается в последнее поле). Пустые поля в конце сохраняются.
3. Если параметр — отрицательное число, то количество возвращаемых полей не ограничено, а пустые поля в конце сохраняются.
Ниже приведены примеры:
str = "alpha,beta,gamma,,"
list1 = str.split(",") # ["alpha","beta","gamma"]
list2 = str.split(",",2) # ["alpha", "beta,gamma,,"]
list3 = str.split(",",4) # ["alpha", "beta", "gamma", ","]
list4 = str.split(",",8) # ["alpha", "beta", "gamma", "", "")
list5 = str.split(",",-1) # ["alpha", "beta", "gamma", "", ""]
Для сопоставления строки с регулярным выражением или с другой строкой служит метод
scan
str = "I am a leaf on the wind..."
# Строка интерпретируется буквально, а не как регулярное выражение.
arr = str.scan("а") # ["а","а","а"]
# При сопоставлении с регулярным выражением возвращаются все соответствия.
arr = str.scan(/w+/) # ["I", "am", "a", "leaf", "on", "the",
"wind"]
# Можно задать блок.
str.scan(/w+/) {|x| puts x }
Класс
StringScanner
require 'strscan'
str = "Смотри, как я парю!"
ss = StringScanner.new(str)
loop do
word = ss.scan(/w+/) # Получать по одному слову.
break if word.nil?
puts word
sep = ss.scan(/W+/) # Получить следующий фрагмент,
# не являющийся словом.
break if sep.nil?
end
2.9. Форматирование строк
В Ruby, как и в языке С, для этой цели предназначен метод
sprintf
sprintf
printf