Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Ruby: Общие вопросы > Синтаксис языка Ruby, extends, непонятные моменты


Автор: fell 29.7.2010, 10:01

module Dep
  extend self
  some methods here
   class Some
      def hello; p 'hello';end
   end
end
что делает эта конструкция ? extend вообще добавляет из модуля методы. 
и делает их классовыми( модульными) методами. self  у нас тут Dep, extend Dep получается ?
А тут что ?

Автор: source777 31.7.2010, 17:23
Цитата(fell @  29.7.2010,  10:01 Найти цитируемый пост)
что делает эта конструкция ?

Она делает методы экземпляра доступными для вызова как методы модуля.

Код

module Dep
  extend self
  
  def some_method(*args)
    # do something
  end
end


Благодаря extend self, можно вызывать метод так:
Dep.some_method(...)

Автор: fell 31.7.2010, 19:14
а почему не писать 
def self.method
end
?
опять для простоты ? module << self не сработает ?

Автор: source777 2.8.2010, 14:36
Цитата(fell @  31.7.2010,  19:14 Найти цитируемый пост)
а почему не писать 
def self.method
end
?

Ну так это же будет далеко не то же самое...
Например, Array.send :include, Dep
будет примешивать к классу Array методы экземпляра, т.е. Array.new.some_method

А вообще попробуй поэкспериментировать сам: запусти irb и вперёд - пробовать разные варианты и на собственном опыте познавать их отличия. Это самый эффективный способ разобраться и запомнить отличия.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)