Khi trả lời một câu hỏi khác, tôi nhận ra rằng chương trình sau không hoàn toàn làm những gì tôi nghĩ.Phạm vi toàn cầu của Ruby
puts "test"
self.puts "test" # => private method `puts' called for main:Object (NoMethodError)
Ngoại lệ làm tôi ngạc nhiên, như tôi luôn luôn nghĩ rằng cuộc gọi phương pháp top-level sẽ được giải quyết bởi các trường hợp đối tượng main
, nhưng điều này dường như không phải là trường hợp.
Ai là người nhận thực tế cuộc gọi đầu tiên và cuộc gọi được giải quyết như thế nào? Đây có phải là quy tắc đặc biệt chỉ áp dụng cho các cuộc gọi phương thức ở phạm vi cấp cao nhất không?
Yeah, nhưng tại sao tôi có thể gọi một phương pháp riêng nếu tôi không chỉ định 'self'? –
Bởi vì đặt trên riêng của mình là phạm vi bên trong của đối tượng, trực tiếp gọi self.put có nghĩa là bạn đang cố gắng gọi phương pháp đặt phạm vi riêng tư để tự. Ill cập nhật câu trả lời của tôi với một số mã. . – mguymon
Hy vọng rằng ví dụ mã giúp minh họa các giá trị so với self.puts – mguymon