Сообщение от
Flcn
Например у объекта класс .class это Class а superclass это Object
в свою очередь у Class класс это он сам и есть, а superclass это Module и так далее..
это в 1.8
там вот в чем фигня, есть так называемые области видимости. (контексты)
PHP код:
class Base
puts "#{self.class.name}"
end
выведет Class, потому что описание класса тоже является объектом ( а мы знаем, что в руби ВСЁ является объектом )
Раз self в теле описания класса является объектом 'Class' (всё кроме объявления методов экземпляров класса)
то мы можем вот что сделать:
PHP код:
class Base
def self.test(string)
puts "#{string} from #{self.class.name}"
end
end
def self -> объявляем метод в контексте класса Class, то есть создаём метод для объекта этого класса.
Теперь мы сможем сделать следующее:
PHP код:
// для наглядности унаследуем новый класс от класса Base
// все методы, в том числе и методы класса Class тоже унаследуются
class Core < Base
test "This is test str"
end
этот код напишет:
This is test str from Class
В общем то на этом принципе основано море программ (например Rails)
PHP код:
class User
named_scope :not_activated, :conditions => ["active = ?", 0]
end
и затем где угодно в Rails-app:
PHP код:
users_to_clear = User.not_activated()
users_to_clear.each do |user|
user.destroy()
end
