Pre-Filled Prompt in Ruby [duplicate]

To pytanie ma już tutaj odpowiedź:

Co da mi coś takiego jak read Ruby z wartością domyślną? 5 odpowiedzi

Używam do Ruby napisać małe narzędzie wiersza poleceń do wyszukiwania Pubmed. W tej chwili monituję użytkownika o zapytanie i wyświetlam wyniki, a użytkownik ma możliwość dołączenia do zapytania lub wprowadzenia całkowicie nowego zapytania. Chciałbym dodać możliwość edycji bieżącego zapytania; tj. znak zachęty powinien być wypełniony wstępnie edytowalną wersją poprzedniego zapytania, tak jak poniżej:

Enter query: <PREVIOUS QUERY HERE>

Łatwo jest wydrukować poprzednie zapytanie obok znaku zachęty, ale jak mogę sprawić, by to wyjście było edytowalne, tak jakby użytkownik sam je wpisał?

@Casper: Dziękuję za odpowiedź Caspera. Wypróbowałem kod podany poniżej i rzeczywiście działa on samodzielnie. Co dziwne, wydaje się, że nie działa, gdy próbuję go użyć w klejnocie. Mój klejnot nazywa się db_hippo. Dodałem rb-readline jako zależność w moim gemspec i umieściłem rozszerzenie RbReadline w lib / db_hippo / rb-readline.rb

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

Chcę korzystać z tej funkcjonalności w innym submodule DbHippo, DbHippo :: Source. W DbHippo :: Źródło dodałem na górze:

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

Następnie w jednej z metod DbHippo :: Source, mam:

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

Zmienna zapytania na pewno nie jest pusta, ale z jakiegoś powodu w tym kontekście monit nie jest wstępnie wypełniony. Zauważyłem również, że jeśli umieściłem rozszerzenie w tym samym pliku (lib / db_hippo / rb-readline), nie czyniąc go podmodułem DbHippo, pojawia się błąd:niezainicjowana stała DbHippo :: Source :: Readline (NameError) na linii:

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

Wszystko to wydaje się mieć coś wspólnego z prawidłowym nazewnictwem modułów, wymaga instrukcji i klejnotów. To pierwszy klejnot, który próbowałem zbudować. Jakiś pomysł, co się tutaj dzieje?

questionAnswers(2)

yourAnswerToTheQuestion