2015-04-17 11 views
9

Jestem trochę ciekaw, czy mogę to wiedzieć, czy jest jakaś różnica pomiędzy dwoma podejściami?Czy jest jakaś różnica między wywołaniem metody klasy Ruby a metodą klasową zi bez siebie?

  1. Wywołanie metody klasy zw metody klasy przy użyciu własnej

    class Test 
        def self.foo 
        puts 'Welcome to ruby' 
        end 
    
    def self.bar 
        self.foo 
    end 
    
    end 
    

    Test.bar # Zapraszamy do ruby ​​metodę klasy

  2. dzwonienie z w metodzie klasy bez siebie

    class Test 
        def self.foo 
        puts 'Welcome to ruby' 
        end 
    
    def self.bar 
        foo 
    end 
    
    end 
    

    Test.bar # Witamy w ruby ​​

+0

Należy pamiętać, że nie jest to specyficzne dla metod klasowych, to samo dotyczy wywoływania metod instancji. – Stefan

Odpowiedz

12

Tak, jest różnica. Ale nie w twoim przykładzie. Ale jeśli foo była metoda private klasy, wówczas pierwsza wersja podniesie wyjątek, bo nazywasz foo z wyraźną odbiornika:

class Test 
    def self.foo 
    puts 'Welcome to ruby' 
    end 
    private_class_method :foo 

    def self.bar 
    self.foo 
    end 
end 

Test.bar 
#=> NoMethodError: private method `foo' called for Test:Class 

ale druga wersja będzie nadal działać:

class Test 
    def self.foo 
    puts 'Welcome to ruby' 
    end 
    private_class_method :foo 

    def self.bar 
    foo 
    end 
end 

Test.bar 
#=> "Welcome to ruby" 
+1

Kolejna różnica: jeśli istniała lokalna zmienna 'foo', to' foo' będzie odnosić się do tej zmiennej, a 'self.foo' będzie odnosić się do tej metody. – Stefan

Powiązane problemy