Thực tế, tính năng tự động hoàn thành hoạt động cho .
. Các tùy chọn hoàn thành được tìm thấy bằng cách gọi #methods
trên đối tượng. Bạn có thể thấy điều này cho chính mình bằng cách ghi đè Object.methods
:
>> def Object.methods; ["foo", "bar"]; end
=> nil
>> Object.[TAB]
Object.foo Object.bar
>> Object.
Lưu ý rằng điều này chỉ hoạt động khi các biểu hiện bên trái của .
là một chữ. Nếu không, việc nhận đối tượng gọi #methods
sẽ liên quan đến việc đánh giá phía bên trái, có thể có tác dụng phụ. Bạn có thể thấy điều này cho chính mình cũng như:
[continuing from above...]
>> def Object.baz; Object; end
=> nil
>> Object.baz.[TAB]
Display all 1022 possibilities? (y or n)
Chúng tôi thêm một phương pháp #baz
-Object
trả về Object
riêng của mình. Sau đó, chúng tôi tự động hoàn tất để nhận các phương pháp mà chúng tôi có thể gọi vào số Object.baz
. Nếu IRB gọi là Object.baz.methods
, nó sẽ nhận được cùng một điều như Object.methods
. Thay vào đó, IRB có 1022 gợi ý. Tôi không chắc họ đến từ đâu, nhưng rõ ràng là một danh sách chung chung không thực sự dựa trên ngữ cảnh.
Toán tử ::
cũng được sử dụng để nhận các hằng số của mô-đun, trong khi .
thì không. Đó là lý do tại sao HTTP
sẽ hiển thị khi hoàn thành cho Net::
, nhưng không hiển thị cho Net.
. Net.HTTP
không chính xác, nhưng Net::HTTP
là.