我正在寻找一种方法,可以从程序的主循环调用的函数中获取来自终端的输入。
我并不担心在编写脚本的中途执行脚本,因为当应用程序窗口(而不是终端或控制台窗口)失去焦点时,主循环会暂停。
这只是dev-所以eval的任何不幸都由我来负责。
编辑:我忘了说,如果没有输入,我希望主循环不中断。
发布于 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
发布于 2018-06-21 04:44:12
在Ruby语言中,当没有更多的行可读(即到达EOF )时,Kernel#gets
将返回nil
。
因此,下面的脚本将执行与上面的Java代码等效的操作:
script = ''
while line = gets
script += line
end
发布于 2018-06-21 04:57:36
您可以将输入行捕获为数组,并通过换行符连接元素:
script = STDIN.readlines.join("\n")
要评估它,请执行以下操作:
eval script rescue nil
或者:
begin
eval script
rescue
end
正如你在评论中提到的,如果你需要的话,你可以使用STDOUT.flush
。如果Ruby程序立即结束,就不需要刷新stdout。
https://stackoverflow.com/questions/50956369
复制相似问题