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 odpowiedziUż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?