Предварительно заполненное приглашение в Ruby [дубликат]
This question already has an answer here:
What will give me something like ruby readline with a default value? 5 answersЯ использую Ruby для написания небольшой утилиты командной строки для поиска в Pubmed. Прямо сейчас я запрашиваю у пользователя запрос и отображаю результаты, и у пользователя есть возможность добавить запрос или ввести совершенно новый запрос. Я хотел бы добавить возможность редактировать текущий запрос; то есть приглашение должно быть предварительно заполнено редактируемой версией предыдущего запроса, например так:
Enter query: <PREVIOUS QUERY HERE>
Достаточно легко напечатать предыдущий запрос рядом с подсказкой, но как мне сделать этот вывод редактируемым, как если бы пользователь сам его набрал?
@casper: Спасибо за ответ Каспер. Я попробовал код, который вы предоставили ниже, и он действительно работает сам по себе. Как ни странно, это не работает, когда я пытаюсь использовать его в драгоценном камне. Мой драгоценный камень называется db_hippo. Я добавил rb-readline в качестве зависимости в моем gemspec и добавил расширение для RbReadline в lib / db_hippo / rb-readline.rb
module DbHippo
module RbReadline
<CASPER'S EXTENSION HERE>
end
end
Я хочу использовать функциональность в другом подмодуле DbHippo, DbHippo :: Source. В DbHippo :: Source я добавил вверху:
require 'rb-readline'
require 'db_hippo/rb-readline'
Затем в одном из методов DbHippo :: Source я имею:
RbReadline.prefill_prompt(query)
query = Readline.readline("Query: ", true)
Переменная запроса определенно не пуста, но по какой-то причине в этом контексте приглашение не заполняется предварительно. Я также замечаю, что если я помещаю расширение в тот же файл (lib / db_hippo / rb-readline), не делая его подмодулем DbHippo, я получаю ошибку:uninitialized constant DbHippo::Source::Readline (NameError) на линии:
query = Readline.readline("Query: ", true)
Похоже, что все это связано с правильным именованием модулей, операторов операторов и гемов. Это первая жемчужина, которую я пытался собрать. Есть идеи, что здесь не так?