Eigentlich funktioniert Auto-Vervollständigung für .
. Die Beendigungsoptionen werden gefunden, indem #methods
für das Objekt aufgerufen wird. Sie können diese Object.methods
durch zwingende selbst sehen:
>> def Object.methods; ["foo", "bar"]; end
=> nil
>> Object.[TAB]
Object.foo Object.bar
>> Object.
Beachten Sie, dass dies nur funktioniert, wenn der Ausdruck auf der linken Seite des .
eine wörtliche ist. Andernfalls würde das Abrufen des Objekts, das #methods
aufrufen soll, die Auswertung der linken Seite beinhalten, was zu Nebenwirkungen führen kann. Sie können für sich selbst als auch sehen:
[continuing from above...]
>> def Object.baz; Object; end
=> nil
>> Object.baz.[TAB]
Display all 1022 possibilities? (y or n)
wir eine Methode #baz
-Object
hinzufügen, die Object
selbst zurückgibt. Dann vervollständigen wir automatisch die Methoden, die wir unter Object.baz
aufrufen können. Wenn IRB Object.baz.methods
aufgerufen wird, würde es dasselbe wie Object.methods
erhalten. Stattdessen hat IRB 1022 Vorschläge. Ich bin mir nicht sicher, woher sie kommen, aber es ist eindeutig eine generische Liste, die nicht wirklich auf Kontext basiert.
Der Operator ::
wird (auch) zum Abrufen der Konstanten eines Moduls verwendet, während .
nicht verwendet wird. Deshalb erscheint HTTP
in der Fertigstellung für Net::
, aber nicht für Net.
. Net.HTTP
ist nicht korrekt, aber Net::HTTP
ist.