2015-04-17 12 views
9

Biliyorum biraz merak ediyorum, aşağıdaki iki yaklaşım arasında bir fark var mı?Sınıf metodu ile kendi kendine ve kendiliğinden olmayan Ruby sınıf metodu arasında herhangi bir fark var mıdır?

  1. kendinden kullanarak sınıf yöntemindeki ile sınıf yöntemi çağırma

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

    Test.bar # öz

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

    Test.bar olmadan sınıf yöntemindeki ile

  2. Arama sınıf yöntemini yakut hoş geldiniz # Ruby'ye Hoşgeldiniz

+0

Not o Bu sınıf yöntemleri için spesifik değildir, örnek yöntemlerini çağırmak için aynıdır. – Stefan

cevap

12

Evet, bir fark var. Ama senin örneğinde değil. Ama eğer foo Eğer açık seçik bir alıcı foo çağrı çünkü sonra ilk sürümü, bir istisna gündeme getireceğini, bir private sınıf yöntemi oldu:

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 

Ama ikinci versiyonu hala çalışacak:

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

Başka bir fark: eğer 'foo' yerel değişkeni varsa, foo bu değişkene başvurur ve 'self.foo' metodu ifade eder. – Stefan

İlgili konular