我经常发现自己在做以下事情:
print "Input text: "
input = gets.strip
是否有一种优美的方法可以一站式完成?就像是:
puts "Input text: #{input = gets.strip}"
问题在于它在显示提示之前要等待输入。有任何想法吗?
Answers:
查看高线:
require "highline/import"
input = ask "Input text: "
我认为可以采用类似Marc-Andre建议的方法,但是当您只需要在要使用的任何脚本的顶部定义两行函数时,为什么要引入大量代码:
def prompt(*args)
print(*args)
gets
end
name = prompt "Input name: "
.chomp
方法,gets
否则变量\n
末尾将包含换行符。
我知道这个问题很旧,但是尽管我会展示我用作获取输入的标准方法的东西。
require 'readline'
def input(prompt="", newline=false)
prompt += "\n" if newline
Readline.readline(prompt, true).squeeze(" ").strip
end
这真的很好,因为如果用户在末尾或开头添加了怪异的空格,它将删除这些空格,并保留其过去输入内容的历史记录(将更true
改为false
,不让它执行此操作。)。并且,如果ARGV
不为空,gets
则将尝试从中读取文件ARGV
,而不是获取输入。另外,它Readline
是Ruby标准库的一部分,因此您无需安装任何gems。此外,使用时您不能移动光标gets
,但可以使用Readline
。
而且,我知道该方法不是一行,而是当您调用它时
name = input "What is your name? "
Readline::readline
]终止ruby解释器,并且在用户等待输入行时按'^ C'后不返回终端状态。”
highline/import
跟随@Bryn的领导:
def prompt(default, *args)
print(*args)
result = gets.strip
return result.empty? ? default : result
end
您提出的解决方案的问题在于,只有在读取,剥离和分配输入之后才能构建要打印的字符串。您可以用分号分隔每行:
$ ruby -e 'print "Input text: "; input=gets.strip; puts input'
Input text: foo
foo