Хабр Курсы для всех
РЕКЛАМА
Практикум, Хекслет, SkyPro, авторские курсы — собрали всех и попросили скидки. Осталось выбрать!
class Class
alias oldNew new
def new(*args)
print "Creating a new ", self.name, "\n"
oldNew(*args)
end
end
class Name
end
n = Name.new
# мета класс сингелтон
class Singelton < Class
def new(*args)
if (@instance==nil) @instance = base.new(args);
@instance
end
end
# использование метакласса Singelton
Singelton God
method Hi
puts "Hello, i'm God"
end
end
Теперь God.new - возвращает один и тот же объект
class God include Singleton end God.instance
class Penguin
def sing
# ...
end
end
memphis = Penguin.new
mumble = Penguin.new
def mumble.sing
fail
end
def mumble.dance
# ...
end
memphis.sing
mumble.sing # => RuntimeError
mumble.dance
memphis.dance # => NoMethodError
def initialize(name, age) @name = name @age = age super end
super аналогичен вызову super name, age, а не super nil, nilclass Dog def initialize(name, age) @name = name+" - dog" @age = age super end end dog = Dog.new "Rex", 5 <pre> В результате @name будет равно "Rex" а не "Rex - dog", потому как Pet.initialize вызывается со значением "Rex".
class A
def initialize
p self
end
end
a = A.new
b = A.allocate # создаст объект, но без init'aget_name и set_name? :( В Руби принят о так:class Dog
def name
@name
end
def name=(str)
@name = str
end
end
Покорим Ruby вместе! Капля восьмая