Phương thức khởi tạo (constructor) là private hoặc public trong ruby?Khởi tạo lớp Ruby (hàm tạo) là phương thức riêng hoặc phương thức công khai?
11
A
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.
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
Bạn cũng có thể gọi 'initialize' của một đối tượng bởi 'obj.send (: khởi tạo)'. –
@undur_gongor: Vâng, điều đó phù hợp với bất kỳ phương pháp riêng tư nào. –