Программирование на языке Ruby
Программирование на языке Ruby читать книгу онлайн
Внимание! Книга может содержать контент только для совершеннолетних. Для несовершеннолетних чтение данного контента СТРОГО ЗАПРЕЩЕНО! Если в книге присутствует наличие пропаганды ЛГБТ и другого, запрещенного контента - просьба написать на почту [email protected] для удаления материала
Необходимо оговориться, что операции
loadrequireloadrequireloadПрограммисты, только начинающие осваивать Ruby, особенно имеющие опыт работы с языком С, могут поначалу путать операции
requireincluderequireinclude1.3.4. Создание классов
В Ruby есть множество встроенных классов, и вы сами можете определять новые. Для определения нового класса применяется такая конструкция:
class ClassName# ...endСамо имя класса - это глобальная константа, поэтому оно должно начинаться с прописной буквы. Определение класса может содержать константы, переменные класса, методы класса, переменные экземпляра и методы экземпляра. Данные уровня класса доступны всем объектам этого класса, тогда как данные уровня экземпляра доступны только одному объекту
Попутное замечание: строго говоря, классы в Ruby не имеют имен. «Имя» класса — это всего лишь константа, ссылающаяся на объект типа
ClassClassClassВот как определяется простой класс:
class Friend @@myname = "Эндрю" # переменная класса def initialize(name, sex, phone) @name, @sex, @phone = name, sex, phone # Это переменные экземпляра end def hello # метод экземпляра puts "Привет, я #{@name}." end def Friend.our_common_friend # метод класса puts "Все мы друзья #{@@myname}." endendf1 = Friend.new("Сюзанна","F","555-0123")f2 = Friend.new("Том","M","555-4567")f1.hello # Привет, я Сюзанна.f2.hello # Привет, я Том.Friend.our_common_friend # Все мы друзья Эндрю.Поскольку данные уровня класса доступны во всем классе, их можно инициализировать в момент определения класса. Если определен метод с именем
initializenewТеперь взгляните на следующий фрагмент, обращая особое внимание на методы
getmyvarsetmyvarmyvar=class MyClass NAME = "Class Name" # константа класса @@count = 0 # инициализировать переменную класса def initialize # вызывается после выделения памяти для объекта @@count += 1 @myvar = 10 end def MyClass.getcount # метод класса @@count # переменная класса end def getcount # экземпляр возвращает переменную класса! @@count # переменная класса end def getmyvar # метод экземпляра @myvar # переменная экземпляра end def setmyvar(val) # метод экземпляра устанавливает @myvar @myvar = val end def myvar=(val) # другой способ установить @myvar @myvar = val endendfoo = MyClass.new # @myvar равно 10foo.setmyvar 20 # @myvar равно 20foo.myvar =30 # @myvar равно 30Здесь мы видим, что
getmyvar@myvarsetmyvarmyvar=setmyvarКласс
Moduleattrattr_accessorattr_readerattr_writergetmyvarsetmyvarmyvar=
