2015-03-12 4 views
0

Я понимаю, что include создает методы экземпляра, а extend создает методы класса. Как определить, является ли метод экземпляром или методом класса?Как определить, является ли метод в модуле методом экземпляра или методом класса

В следующем примере это выглядит как метод метода экземпляра и метод класса. Нет ли различия между методами экземпляра и класса в некоторых случаях?

module Test 
    def aux 
    puts 'aux' 
    end 
end 

class A 
    include Test 
end 

class B 
    extend Test 
end 

a = A.new 
a.aux 
B.aux 

ответ

2

Разница между include и extend это как класс что перемешивает модуль будет вести себя. Оба include и extend будет работать только на методах «экземпляра» соответствующего модуля (то есть методы, которые не начинаются с MODULENAME или self)

Пример:

module Foo 
    def a 
    puts "a" 
    end 

    def Foo.b 
    puts "b" 
    end 

    def self.c 
    puts "c" 
    end 
end 

класс, который включает этот модуль будет иметь доступ только к a как метод экземпляра в то время как класс, который расширяет это пока только иметь доступ к a как метод класса. Ни один из них не будет иметь доступа к b или c, поскольку они являются методами класса Foo и могут быть доступны только по телефону Foo.b или Foo.c