2015-02-04 3 views
0

Я пытаюсь прочитать некоторые коды из рельсов. И я не понимаю некоторых из них. Надеюсь получить помощь.Что это за модуль `super` be?

Код active_support/dependencies/autoload.rb. Метод autoload.

def autoload(const_name, path = @_at_path) 
    unless path 
    full = [name, @_under_path, const_name.to_s].compact.join("::") 
    path = Inflector.underscore(full) 
    end 

    if @_eager_autoload 
    @_autoloads[const_name] = path 
    end 

    super const_name, path 
end 
  • Мой вопрос заключается в том, что super будет здесь.
  • Есть ли документ или книги рассказывают об источниках?
+0

Возможный дубликат [ruby super keyword] (http://stackoverflow.com/questions/2597643/ruby-super-keyword) –

+0

Трудно сказать, не знает ли кто-либо, что делает 'super', или ze doesn ' t знать, что суперкласс будет в этом конкретном случае. –

+0

BTW, я знаю метод супер. Я просто хочу знать, что супер будет в этом случае. – jerrytao

ответ

0

Указанный способ определяется как метод экземпляра, принадлежащего модулю ActiveSupport::Autoload , Поскольку это модуль, для того, чтобы метод экземпляра стал активным, модуль должен быть включен в некоторый класс. То, что super будет зависеть от того, что этот класс. Все предки рассматриваемого класса будут рассмотрены для метода #autoload. Если ни один из них не определяет его, будет удалено Kernel#autoload, которое всегда есть.

+0

Спасибо. Я забыл метод 'kernel # autoload'. – jerrytao

0

super является методом рубина, который вызывает тот же метод с именем, в этом случае autoload, из класса он наследуется от. Я не знаю, если я сделал себе ясно, как английский не является моим родным языком, поэтому я покажу вам пример:

class Human 
    def shout(words) 
    puts "I am yelling #{words}" 
    end 
end 

class Person < Human 
    def shout(words) 
    puts "I am #{words}" 
    puts super "loud" 
    end 
end 

Person.new.shout("awesome") 

Output: 
I am awesome 
I am yelling loud