私はRubyを使用して、Pubmedを検索するための小さなコマンドラインユーティリティを作成しています。現在、ユーザーにクエリの入力を求めて結果を表示しています。ユーザーは、クエリに追加するか、まったく新しいクエリを入力するかを選択できます。現在のクエリを編集する機能を追加したいと思います。つまり、プロンプトには、次のように、前のクエリの編集可能なバージョンが事前に入力されている必要があります。
Enter query: <PREVIOUS QUERY HERE>
プロンプトの横にある前のクエリを印刷するのは簡単ですが、ユーザーが自分で入力したかのように、この出力を編集可能にするにはどうすればよいですか?
@casper:キャスパーの回答ありがとうございます。私はあなたが以下に提供したコードを試しました、そしてそれは確かにそれ自身で働きます。不思議なことに、宝石で使用しようとするとうまくいかないようです。私の宝石はdb_hippoと呼ばれています。gemspecに依存関係としてrb-readlineを追加し、lib / db_hippo/rb-readline.rbにRbReadlineの拡張機能を追加しました。
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のメソッドの1つで、次のようになります。
RbReadline.prefill_prompt(query)
query = Readline.readline("Query: ", true)
クエリ変数は間違いなく空ではありませんが、このコンテキストでは何らかの理由でプロンプトが事前に入力されません。また、拡張子をDbHippoのサブモジュールにせずに同じファイル(lib / db_hippo / rb-readline)に入れると、次のエラーが発生します:初期化されていない定数DbHippo :: Source :: Readline(NameError):
query = Readline.readline("Query: ", true)
これはすべて、モジュールの適切な命名、requireステートメント、およびgemと関係があるようです。これは私が構築しようとした最初の宝石です。ここで何が問題になっているのでしょうか。