在Ruby中,如何提示用户从选项列表中进行选择?



我遇到了一个gem,它在这里做了我想要的,但我很好奇我是否可以在本地做到这一点。

例如:

> ruby some_file.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 ...

首先你需要打印一个标题。这可以通过puts:

完成
puts "Choose a fruit"

输出:

Choose a fruit

那么对于each选项,您必须打印一个(以1为基础的)数字及其索引。后者可通过with_index添加:

options = ['Apple', 'Orange', 'Kewi']
options.each.with_index(1) do |option, index|
puts "#{index}. #{option}"
end

输出:

1. Apple
2. Orange
3. Kewi

最后必须提示用户输入。您可以使用print输出字符串而不添加换行符,然后调用gets收集输入:

print '> '
input = gets

输出:(应该是游标)


> ▏> h▏h
> hi▏
> hi输入

之后,将input设置为"hin"。注意,gets将返回一个字符串,其中包括从输入的换行字符n

由于您对这里的数字输入感兴趣,因此可以使用to_i将字符串转换为整数。另外,您可以loop,直到值为between?1和3(选项的数量):

loop do
print '> '
choice = gets.to_i
break if choice.between?(1, options.size)
puts 'Enter a value between 1 and #{options.size}'
end

的例子:

> 5
Enter a value between 1 and 3
> foo
Enter a value between 1 and 3
> 2

foo被拒绝,因为to_i对于非数字字符串返回0,并且0不在1到3之间。

这应该让你开始。您可能希望将上述所有操作(打印标题、显示选项、收集输入)移动到一个方法中,该方法只返回用户的选择。最后,它可以这样工作:

fruit = select('Choose a fruit', ['Apple', 'Orange', 'Kewi'])
color = select('What color?', ['Green', 'Red'])
puts "Creating #{color} #{fruit}"

相关内容

  • 没有找到相关文章

最新更新