2015-04-17 5 views
9

Ich bin ein bisschen neugierig darauf, das zu wissen, gibt es einen Unterschied zwischen zwei Ansätzen?Gibt es einen Unterschied zwischen der Ruby-Klassenmethode, die in der Klassenmethode mit und ohne Selbst aufruft?

  1. aufrufen Klassenmethode mit in Klassenmethode mit selbst

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

    Test.bar # Willkommen

  2. Berufung Klassenmethode mit in Klassenmethode ruby ​​ohne Selbst

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

    Test.bar # Willkommen bei Ruby

+0

Beachten Sie, dass Dies ist nicht spezifisch für Klassenmethoden, es ist dasselbe für den Aufruf von Instanzmethoden. – Stefan

Antwort

12

Ja, es gibt einen Unterschied. Aber nicht in deinem Beispiel. Aber wenn foo war eine private Klassenmethode, dann Ihre erste Version eine Ausnahme auslösen würde, da Sie foo mit einem expliziten Empfänger nennen:

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 

Aber die zweite Version würde immer noch funktionieren:

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

Ein weiterer Unterschied: Wenn es eine lokale Variable "foo" gäbe, würde "foo" auf diese Variable verweisen und "self.foo" würde sich auf die Methode beziehen. – Stefan

Verwandte Themen