Программирование на языке Ruby
Программирование на языке Ruby читать книгу онлайн
Внимание! Книга может содержать контент только для совершеннолетних. Для несовершеннолетних чтение данного контента СТРОГО ЗАПРЕЩЕНО! Если в книге присутствует наличие пропаганды ЛГБТ и другого, запрещенного контента - просьба написать на почту [email protected] для удаления материала
def to_s "He" end def to_str "гелий" endende = Helium.newprint "Элемент "puts e # Элемент He.puts "Элемент " + e # Элемент гелий.puts "Элемент #{e}" # Элемент He.Как видите, разумное определение этих методов в собственном классе может несколько повысить гибкость применения. Но что сказать об идентификации объектов, переданных методам вашего класса?
Предположим, например, что вы написали метод, который ожидает в качестве параметра объект
StringFile.newРешить эту проблему просто. Если вы ожидаете на входе строку, проверьте, имеет ли объект метод
to_strdef set_title(title) if title.respond_to? :to_str title = title.to_str end # ...endНу а если объект не отвечает на вызов метода
to_strto_sStringArgumentErrorКороткий путь к цели выглядит так:
title = title.to_str rescue titleОн опирается на тот факт, что при отсутствии реализации метода
to_strrescuetitle = title.to_str rescue title.to_s rescue title# Обрабатывается маловероятный случай, когда отсутствует даже метод to_s.С помощью неявного преобразования можно было бы сделать строки и числа практически эквивалентными:
class Fixnum def to_str self.to_s end endstr = "Число равно " + 345 # Число равно 345.Но я не рекомендую так поступать: «много хорошо тоже нехорошо». В Ruby, как и в большинстве языков, строки и числа — разные сущности. Мне кажется, что ясности ради преобразования, как правило, должны быть явными.
И еще: в методе
to_str2.17. Дописывание в конец строки
Для конкатенации строк применяется оператор
<<str = "А"str << [1,2,3].to_s << " " << (3.14).to_s# str теперь равно "А123 3.14".Если число типа
Fixnumstr = "Marlow"str << 101 << ", Christopher"# str теперь равно "Marlowe, Christopher".2.18. Удаление хвостовых символов новой строки и прочих
Часто бывает необходимо удалить лишние символы в конце строки. Типичный пример — удаление символа новой строки после чтения строки из внешнего источника.
Метод
choprnrnstr = gets.chop # Прочитать, удалить символ новой строки.s2 = "Some stringn" # "Some string" (нет символа новой строки).s3 = s2.chop! # s2 теперь тоже равно "Some string".s4 = "Other stringrn"s4.chop! # "Other string" (нет символа новой строки).Обратите внимание, что при вызове варианта
chop!Важно еще отметить, что последний символ удаляется, даже если это не символ новой строки:
str = "abcxyz"s1 = str.chop # "abcxy"Поскольку символ новой строки присутствует не всегда, иногда удобнее применять метод
chompstr = "abcxyz"str2 = "123n"str3 = "123r"str4 = "123rn"s1 = str.chomp # "abcxyz"s2 = str2.chomp # "123"# Если установлен стандартный разделитель записей, то удаляется не только # n, но также r и rn.s3 = str3.chomp # "123"s4 = str4.chomp # "123"Как и следовало ожидать, имеется также метод
chomp!chomp
