我经常发现自己在做以下事情:
print "Input text: "
input = gets.strip
Run Code Online (Sandbox Code Playgroud)
有一种优雅的方式在一行中做到这一点吗?就像是:
puts "Input text: #{input = gets.strip}"
Run Code Online (Sandbox Code Playgroud)
这样做的问题是它在显示提示之前等待输入.有任何想法吗?
Mar*_*une 77
查看高线:
require "highline/import"
input = ask "Input text: "
Run Code Online (Sandbox Code Playgroud)
小智 73
我认为像Marc-Andre所建议的那样将会是一种方式,但是当你可以在你要使用的任何脚本的顶部定义一个双线函数时,为什么要引入大量的代码:
def prompt(*args)
print(*args)
gets
end
name = prompt "Input name: "
Run Code Online (Sandbox Code Playgroud)
小智 32
一个班轮黑客确定.优雅......不完全是.
input = [(print 'Name: '), gets.rstrip][1]
Run Code Online (Sandbox Code Playgroud)
Tia*_*dez 12
关注@Bryn的领导:
def prompt(default, *args)
print(*args)
result = gets.strip
return result.empty? ? default : result
end
Run Code Online (Sandbox Code Playgroud)
Add*_*son 12
我知道这个问题已经过时了,但我会说明我用什么作为获取输入的标准方法.
require 'readline'
def input(prompt="", newline=false)
prompt += "\n" if newline
Readline.readline(prompt, true).squeeze(" ").strip
end
Run Code Online (Sandbox Code Playgroud)
这是非常好的,因为如果用户在年底或年初增加了怪异的空间,它会删除这些,它不断的他们在过去进入了一个历史(更改true,以false不让它这样做).而且,如果ARGV不为空,那么gets将尝试从文件中读取ARGV,而不是获取输入.另外,它Readline是Ruby标准库的一部分,因此您无需安装任何gem.此外,使用时无法移动光标gets,但可以使用Readline.
并且,我知道方法不是一行,而是在你调用它时
name = input "What is your name? "
Run Code Online (Sandbox Code Playgroud)