You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Ruby如何不依赖第三方gem原生实现命令行选项选择交互?

Ruby原生实现命令行交互方案

完全可以通过Ruby原生标准库实现你需要的多级选项选择、操作确认类命令行交互,不需要依赖任何第三方gem,核心仅使用内置的输入输出方法搭配简单的输入校验逻辑即可。

核心功能逻辑

  • 枚举选项选择:循环输出带数字编号的选项列表,读取用户输入后做合法性校验,只有输入为列表内存在的有效编号时才返回对应选项值,无效输入提示用户重新输入
  • 是/否确认:输出带[y/n]标识的确认提示,读取用户输入后做去空格、小写化处理,匹配y/yes返回确认通过,匹配n/no返回确认不通过,其他输入提示重输

完整可运行代码

# 通用选项选择方法
def select_option(prompt, options)
  loop do
    puts "\n#{prompt}"
    options.each_with_index { |opt, idx| puts "#{idx + 1}. #{opt}" }
    print "> "
    input = $stdin.gets&.strip

    if input&.match?(/^\d+$/)
      selected_index = input.to_i - 1
      return options[selected_index] if selected_index.between?(0, options.size - 1)
    end

    puts "输入无效,请输入选项对应的数字编号"
  end
end

# 通用y/n确认方法
def confirm(prompt)
  loop do
    print "\n#{prompt} [y/n]?\n> "
    input = $stdin.gets&.strip&.downcase
    return true if %w[y yes].include?(input)
    return false if %w[n no].include?(input)
    puts "输入无效,请输入y(确认)或n(取消)"
  end
end

# 业务逻辑调用示例
if __FILE__ == $0
  selected_fruit = select_option("Choose a fruit", ["Apple", "Orange", "Kewi"])
  selected_color = select_option("What color?", ["Green", "Red"])
  action_confirmed = confirm("Are you sure you want to create a #{selected_color} #{selected_fruit}")

  if action_confirmed
    puts "\nCreating #{selected_color} #{selected_fruit} ..."
  else
    puts "\n操作已取消"
  end
end

运行效果

将代码保存为.rb文件后,执行ruby 文件名.rb即可得到和预期完全一致的交互流程:

Choose a fruit
1. Apple
2. Orange
3. Kewi
> 1

What color?
1. Green
2. Red
> 2

Are you sure you want to create a Red Apple [y/n]?
> y

Creating Red Apple ...

如果需要实现方向键切换选项、密码输入掩码、实时输入校验这类更复杂的终端交互,原生实现需要额外处理终端模式、转义序列,代码复杂度会明显提升;但你描述的编号选择、操作确认类基础交互,上述原生实现完全可以满足需求,无任何额外依赖。

内容的提问来源于stack exchange,提问作者Dante

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.27 19:54:15