Предварительно заполненное приглашение в 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)

Похоже, что все это связано с правильным именованием модулей, операторов операторов и гемов. Это первая жемчужина, которую я пытался собрать. Есть идеи, что здесь не так?

Ответы на вопрос(2)

Ваш ответ на вопрос