HighLine:choose の挙動、中身

一部良く分かっていないが、全体の呼び出しは、(@menu.shell = false として)

  • @menu = @question = Menu.new(&details)
    • class Menu < Question
  • @menu.choices(*items) unless items.empty?
  • @menu.answer_type = @menu.options
  • @header = @menu.header
  • @prompt = @menu.prompt
    • ERb 用らしいのだが、良く分かっていない
  • selected = ask("Ignored", @menu.answer_type)
    • "Ignored" は引数が使われないからコメントとして伝わるようにこうしているようだ。hoge でもなんでも良い
    • @menu.answer_type は必要なのか? ask 内では使われていない。ask では第二引数は省略できそうだが
    • ask 内で、Question.new は呼ばれない
    • ask 内で、say(@question) が呼ばれる
      • say 内で、statement.to_str が呼ばれる。これは、HighLine::Menu#to_str
        • HighLine::Menu#to_str 内では、list が呼ばれる記述あり。この list は、HighLine#list か?
        • HighLine#list 内で、@menu.to_ary が呼ばれる。@menu.to_ary は選択肢の表示用リストを返す
      • say 内のおそらく @output.print(statement) で、選択肢が表示される
  • @menu.select(self, selected)
    • 何やっているか不明