Классы в Ruby описываются при помощи ключевого слова class, например:
$ irb
irb(main):001:0> class RubyClass
irb(main):002:1> puts "This is class"
irb(main):003:1> end
This is class
=> nil
Класс всегда завершается оператором end.
Переменные в классах Ruby
Локальные переменные: это переменные, описанные в методе класса и недоступны вне этого метода. Локальные переменные всегда начинаются с символа подчеркивания «_«.
Переменные экземпляра класса: это перкменные, доступные всем методам экземпляра класса. Такие переменные начинаются с символа «@«.
Переменные класса: переменные, доступ к которым есть у всех экземпляров класса. Имена таких перменных начинаются с «@@«. Хороший пост на тему разницы между переменными класса и переменными экземпляра класса есть тут>>>.
Глобальные переменные: переменные класса недоступны напрямую другим классам. Что бы определить переменную, доступ к которой будет у всех классов — можно определить глобальную пемренную, которая начинается с символа «$«.
Создание объекта класса — метод new
Для создания нового экземпляра класса в Ruby используется встроенный метод класса new, например:
irb(main):004:0> class TestClass
irb(main):005:1> puts "This is test class"
irb(main):006:1> end
This is test class
=> nil
irb(main):009:0> ex1 = TestClass.new
=> #<TestClass:0x007fd6d4949370>
irb(main):010:0> ex2 = TestClass.new
=> #<TestClass:0x007fd6d4951fe8>
Создание объекта класса — метод initalize
Если вам требуется создать новый экземпляр класса и передать ему какие-то аргументы — вам необходимо создать метод initalize. Он будет вызываться каждый раз, когда будет создаваться новый объект класса.
Например:
$ cat init.rb
#!/usr/bin/env ruby
class Customer
@@no_of_customers=0
def initialize(id, name, addr)
@cust_id=id
@cust_name=name
@cust_addr=addr
end
def exec
puts @cust_id, @cust_name, @cust_addr
end
end
c = Customer.new("id", "somename", "someaddr")
c.exec
Тут объявляется специальный метод initialize, который принимает три аргумента для трех локальных переменных — @cust_id, @cust_name и @cust_addr:
$ ./init.rb
id
somename
someaddr
Методы классов
Каждый метод начинается с ключевого слова def, а имена методов указываются строчными буквами.
Завершается метод ключевым словом end. Например:
class Sample
def function
statement 1
statement 2
end
end
Тут statement 1 и statement 2 являются операторами — телом метода function класса Sample.