Программирование на языке Ruby
Программирование на языке Ruby читать книгу онлайн
Внимание! Книга может содержать контент только для совершеннолетних. Для несовершеннолетних чтение данного контента СТРОГО ЗАПРЕЩЕНО! Если в книге присутствует наличие пропаганды ЛГБТ и другого, запрещенного контента - просьба написать на почту [email protected] для удаления материала
title2 = "The Call of the Wild"# При стандартном сравнении было бы напечатано "yes".if title1 < title2 puts "yes"else puts "no" # А теперь печатается "no".endОбратите внимание, что мы «сохранили» старый метод
<=>alias<<=>Отметим также, что оператор
==<=>Comparable==Допустим, что мы хотим сравнивать строки без учета регистра. Для этого есть встроенный метод
casecmpclass String def <=>(other) casecmp(other) endendЕсть и более простой способ:
class String alias <=> casecmp(other)endНо это не все. Надо еще переопределить оператор
==class String def ==(other) casecmp(other) == 0 endendТеперь все строки будут сравниваться без учета регистра. И при всех операциях сортировки, которые определены в терминах метода
<=>2.8. Разбиение строки на лексемы
Метод
splitПо умолчанию разделителем является пробел, а точнее, значение специальной переменной
$;$FIELD_SEPARATORs1 = "Была темная грозовая ночь."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", "", ""]Для сопоставления строки с регулярным выражением или с другой строкой служит метод
scanstr = "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 }Класс
StringScannerrequire '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?end2.9. Форматирование строк
В Ruby, как и в языке С, для этой цели предназначен метод
sprintfsprintfprintf
