Показать сообщение отдельно

  #101  
Старый 02.06.2010, 02:52
xciss
Новичок
Регистрация: 01.06.2010
Сообщений: 3
Провел на форуме:
6544

Репутация: 0
По умолчанию

Цитата:
Сообщение от 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 

Последний раз редактировалось xciss; 02.06.2010 в 02:54..
 
Ответить с цитированием