Ruby仅在输入存在时获取输入

时间:2018-06-20 20:16:08

标签: ruby input

我正在寻找一种从程序主循环调用的函数中从终端接收输入的方法。

我不担心它会在脚本编写过程中执行一半,因为当应用程序窗口(而不是终端或控制台窗口)失去焦点时,主循环会暂停。

这仅是开发人员专用的,因此任何与eval有关的不幸都在我身边

编辑:我忘了说,如果没有输入,我希望主循环不间断地继续。

3 个答案:

答案 0 :(得分:1)

在Ruby中,Kernel#gets将在没有更多行要读取(即到达EOF)时返回nil

因此,以下脚本将等效于上述Java代码:

script = ''
while line = gets
  script += line
end

答案 1 :(得分:0)

您可以将输入行捕获为数组,并通过换行符将元素连接起来:

script = STDIN.readlines.join("\n")

要对其进行评估:

eval script rescue nil

或者:

begin
  eval script
rescue
end

正如您在评论中所指出的,您可以根据需要STDOUT.flush。如果Ruby程序立即结束,则无需刷新stdout。

答案 2 :(得分:0)

这是有效的,但仅是因为self.reload!选择我的控制台窗口时未调用

Thread.new do
  loop do
    script_temp = gets
    @script = @script + script_temp
  end
end

def self.reload!
  begin
    eval @script
    $stdout.flush()
  rescue Exception
  end
  @script = ''
end

Based on this