首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >仅当输入存在时,Ruby才获取输入

仅当输入存在时,Ruby才获取输入
EN

Stack Overflow用户
提问于 2018-06-21 04:16:08
回答 3查看 150关注 0票数 0

我正在寻找一种方法,可以从程序的主循环调用的函数中获取来自终端的输入。

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

这只是dev-所以eval的任何不幸都由我来负责。

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

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2018-06-23 07:46:59

这很有效,但这仅仅是因为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

票数 0
EN

Stack Overflow用户

发布于 2018-06-21 04:44:12

在Ruby语言中,当没有更多的行可读(即到达EOF )时,Kernel#gets将返回nil

因此,下面的脚本将执行与上面的Java代码等效的操作:

script = ''
while line = gets
  script += line
end
票数 1
EN

Stack Overflow用户

发布于 2018-06-21 04:57:36

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

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

要评估它,请执行以下操作:

eval script rescue nil

或者:

begin
  eval script
rescue
end

正如你在评论中提到的,如果你需要的话,你可以使用STDOUT.flush。如果Ruby程序立即结束,就不需要刷新stdout。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50956369

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档