我正在寻找一种从程序主循环调用的函数中从终端接收输入的方法。
我不担心它会在脚本编写过程中执行一半,因为当应用程序窗口(而不是终端或控制台窗口)失去焦点时,主循环会暂停。
这仅是开发人员专用的,因此任何与eval有关的不幸都在我身边
编辑:我忘了说,如果没有输入,我希望主循环不间断地继续。
答案 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