2015-04-17 13 views
9

Tôi hơi tò mò muốn biết điều đó, có sự khác biệt nào giữa hai cách tiếp cận không?Có sự khác biệt nào giữa phương thức lớp Ruby gọi với phương thức lớp có và không có tự?

  1. gọi method lớp với trong phương pháp lớp học sử dụng tự

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

    Test.bar # Chào mừng bạn đến ruby ​​phương pháp lớp

  2. gọi với trong phương pháp lớp học mà không tự

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

    Test.bar # Chào mừng bạn đến với ruby ​​

+0

Lưu ý rằng điều này không cụ thể đối với các phương thức lớp, nó giống nhau cho việc gọi các phương thức thể hiện. – Stefan

Trả lời

12

Có, có sự khác biệt. Nhưng không phải trong ví dụ của bạn. Nhưng nếu foo là một phương pháp private lớp, sau đó phiên bản đầu tiên của bạn sẽ tăng một ngoại lệ, bởi vì bạn gọi foo với một máy thu rõ ràng:

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 

nhưng phiên bản thứ hai vẫn sẽ làm việc:

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

Một khác biệt: nếu có một biến cục bộ 'foo',' foo' sẽ tham chiếu đến biến đó và 'self.foo' sẽ tham chiếu đến phương thức. – Stefan

Các vấn đề liên quan