2012-01-06 44 views

Trả lời

16

Hãy xem:

class Test 
    def initialize; end 
end 

p Test.new.private_methods.sort.include?(:initialize) 

này in true, vì vậy initialize là một phương pháp riêng. Điều này có ý nghĩa, nó chỉ được gọi bởi phương thức lớp new nếu đối tượng được tạo ra. Nếu chúng tôi muốn, chúng tôi có thể làm điều gì đó như thế này:

class Test 
    def initialize 
    @counter = 0 
    end 

    def reset! 
    initialize 
    end 
end 

Việc lạm dụng nhà xây dựng như thế này có thể dẫn đến các sự cố nếu quá trình khởi tạo biến đơn giản.

+6

Bạn cũng có thể gọi 'initialize' của một đối tượng bởi 'obj.send (: khởi tạo)'. –

+1

@undur_gongor: Vâng, điều đó phù hợp với bất kỳ phương pháp riêng tư nào. –

4

Phương thức initialize trong một lớp sẽ tự động trở thành Riêng tư.

Bạn có thể kiểm tra xem nó sử dụng:

puts ClassName.private_methods.sort 
Các vấn đề liên quan