Vorgefüllte Eingabeaufforderung in Ruby [duplizieren]

Diese Frage hat hier bereits eine Antwort:

Was gibt mir so etwas wie Ruby Readline mit einem Standardwert? 5 Antworten

Ich benutze Ruby, um ein kleines Befehlszeilenprogramm für die Suche in Pubmed zu schreiben. Im Moment fordere ich den Benutzer zur Eingabe einer Abfrage auf und zeige die Ergebnisse an. Der Benutzer hat die Möglichkeit, an die Abfrage anzuhängen oder eine vollständig neue Abfrage einzugeben. Ich möchte die Möglichkeit hinzufügen, die aktuelle Abfrage zu bearbeiten. Das heißt, die Eingabeaufforderung sollte mit einer bearbeitbaren Version der vorherigen Abfrage wie folgt gefüllt sein:

Enter query: <PREVIOUS QUERY HERE>

Es ist einfach genug, die vorherige Abfrage neben der Eingabeaufforderung auszudrucken. Wie kann ich diese Ausgabe jedoch so bearbeiten, als hätte der Benutzer sie selbst eingegeben?

@casper: Danke für die Antwort Casper. Ich habe den Code ausprobiert, den Sie unten angegeben haben, und er funktioniert tatsächlich von alleine. Seltsamerweise scheint es nicht zu funktionieren, wenn ich versuche, es in einem Edelstein zu verwenden. Mein Juwel heißt db_hippo. Ich habe rb-readline als Abhängigkeit in meine gemspec eingefügt und die Erweiterung zu RbReadline in lib / db_hippo / rb-readline.rb eingefügt

module DbHippo
  module RbReadline
    <CASPER'S EXTENSION HERE>
  end
end

Ich möchte die Funktionalität in einem anderen Submodul von DbHippo, DbHippo :: Source, verwenden. In DbHippo :: Source habe ich oben hinzugefügt:

require 'rb-readline'
require 'db_hippo/rb-readline'

Dann habe ich in einer der Methoden von DbHippo :: Source:

RbReadline.prefill_prompt(query)
query = Readline.readline("Query: ", true)

Die Abfragevariable ist definitiv nicht leer, aber aus irgendeinem Grund wird die Eingabeaufforderung in diesem Kontext nicht vorab gefüllt. Ich stelle auch fest, dass ich den Fehler erhalte, wenn ich die Erweiterung in dieselbe Datei (lib / db_hippo / rb-readline) lege, ohne sie zu einem Submodul von DbHippo zu machen:nicht initialisierte Konstante DbHippo :: Source :: Readline (NameError) an der Leitung:

query = Readline.readline("Query: ", true)

Dies alles scheint etwas mit der richtigen Benennung von Modulen, erfordern Anweisungen und Edelsteinen zu tun zu haben. Dies ist das erste Juwel, das ich bauen wollte. Irgendeine Idee, was hier falsch läuft?

Antworten auf die Frage(2)

Ihre Antwort auf die Frage