Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

ruby super keyword

From what I understand, super keyword invokes a method with the same name as the current method in the superclass of the current class. Below in the autoload method, there is a call to super. I would like to know in which superclass I would find a method with the same name or what does the call to super do here

module ActiveSupport   module Autoload     ...           def autoload(const_name, path = @@at_path)       full = [self.name, @@under_path, const_name.to_s, path].compact.join("::")       location = path || Inflector.underscore(full)        if @@eager_autoload         @@autoloads[const_name] = location       end       super const_name, location     end    ....    end end  module ActiveRecord   extend ActiveSupport::Autoload   ...   autoload :TestCase   autoload :TestFixtures, 'active_record/fixtures' end 

This code is from the rails master branch. Thanks much.

like image 702
user290870 Avatar asked Apr 08 '10 04:04

user290870


1 Answers

The example provided in the Ruby Docs for the super keyword:

module Vehicular   def move_forward(n)     @position += n   end end  class Vehicle   include Vehicular  # Adds Vehicular to the lookup path end  class Car < Vehicle   def move_forward(n)     puts "Vrooom!"     super            # Calls Vehicular#move_forward   end end 

Inspecting ancestors

puts Car.ancestors.inspect  # Output # [Car, Vehicle, Vehicular, Object, Kernel, BasicObject] 

Note the inclusion of the Vehicular Module object!

like image 101
maček Avatar answered Sep 17 '22 00:09

maček