Ruby中的一个class轮,用于显示提示,获取input和分配给variables?
我经常发现自己在做以下事情:
print "Input text: " input = gets.strip
有一个优雅的方式来做到这一点? 就像是:
puts "Input text: #{input = gets.strip}"
这个问题是在显示提示之前等待input。 有任何想法吗?
检查高线 :
require "highline/import" input = ask "Input text: "
我认为,像Marc-Andre所说的那样,将会是一个很好的select,但是当你可以在你要使用的任何脚本的顶部定义一个双行函数的时候,为什么还要引入大量的代码:
def prompt(*args) print(*args) gets end name = prompt "Input name: "
一个class轮确定。 优美的…不完全。
input = [(print 'Name: '), gets.rstrip][1]
继Bryn之后:
def prompt(default, *args) print(*args) result = gets.strip return result.empty? ? default : result end
我知道这个问题是旧的,但我虽然我会显示我作为我的标准方法获取input。
require 'readline' def input(prompt="", newline=false) prompt += "\n" if newline Readline.readline(prompt, true).squeeze(" ").strip end
这是非常好的,因为如果用户在最后或开始时添加了奇怪的空格,它将删除这些空格,并保存它们过去input的历史logging(将true
更改为false
以避免这样做。 )。 而且,如果ARGV
不是空的,那么gets
将尝试从ARGV
的文件中读取,而不是获取input。 另外, Readline
是Ruby标准库的一部分,所以你不必安装任何gem。 另外,使用gets
时不能移动光标,但可以使用Readline
。
而且,我知道这个方法不是一行,而是当你调用它的时候
name = input "What is your name? "
你提出的解决scheme的问题是,要输出的string不能被build立,直到input被读取,剥离和分配为止。 你可以用分号分隔每一行:
$ ruby -e 'print "Input text: "; input=gets.strip; puts input' Input text: foo foo
我偶然发现了Inquirer gem,我真的很喜欢它,但我觉得它比Highline更简单易用,虽然缺乏自己的inputvalidation。
你的例子可以这样写
require 'inquirer' inputs = Ask.input 'Input text'