2015-04-17 11 views
9

Sono un po 'curioso di sapere che c'è qualche differenza tra i due approcci?C'è qualche differenza tra il metodo di classe Ruby che chiama con il metodo in classe con e senza self?

  1. chiamata metodo di classe con in metodo di classe utilizzando auto

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

    Test.bar # Benvenuti al rubino metodo di classe

  2. Calling con in metodo di classe senza auto

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

    Test.bar # Benvenuti in rubino

+0

Si noti che questo non è specifico per i metodi di classe, è lo stesso per chiamare i metodi di istanza. – Stefan

risposta

12

Sì, c'è una differenza. Ma non nel tuo esempio. Ma se foo era un metodo private di classe, allora la vostra prima versione avrebbe sollevato un'eccezione, perché si chiama foo con un ricevitore esplicito:

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 

Ma la seconda versione sarebbe ancora lavorare:

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

Un'altra differenza: se ci fosse una variabile locale 'pippo',' pippo' si riferirebbe a quella variabile e 'self.foo' si riferirebbe al metodo. – Stefan

Problemi correlati