Ruby中的超时
我正在做数学测验。 我已经写了这段代码,但控制台对此并不友好。 我试图让它打印出来非常令人印象深刻,如果用户在5秒钟内正确进入,速度不会太慢。这是我写的Ruby中的超时,ruby,timeout,Ruby,Timeout,我正在做数学测验。 我已经写了这段代码,但控制台对此并不友好。 我试图让它打印出来非常令人印象深刻,如果用户在5秒钟内正确进入,速度不会太慢。这是我写的 puts "346*3?" begin Timeout::timeout 5 do dans1 = gets.chomp end rescue Timeout::Error dans1 = nil end puts (dans1 || "Too slow!") if dans1 == "1038" puts "Ver
puts "346*3?"
begin
Timeout::timeout 5 do
dans1 = gets.chomp
end
rescue Timeout::Error
dans1 = nil
end
puts (dans1 || "Too slow!")
if dans1 == "1038"
puts "Very impressive!"
else
puts "Better luck next time..."
end
忽略一些if
s和end
s这只是一个片段,我的其余代码可以正常工作
谢谢 您没有在外部范围中设置dans1,因此它仅在块内部可见。我可能会像这样重新编写代码
puts "346*3?"
dans1 = begin
Timeout::timeout 5 do
gets.chomp
end
rescue Timeout::Error
"Too slow!"
end
puts dans1
if dans1 == "1038"
puts "Very impressive!"
else
puts "Better luck next time..."
end
如果您直接在控制台(即irb)中键入此项,则会出现问题,因为GET无法在您当前输入的代码块中工作!您需要做的是将代码保存到一个文件并加载该文件
> load 'where-my-file-is/my-file.rb'
然后代码就可以运行了。或者你可以把它放进一个方法中
def question
puts "346*3?"
dans1 = begin
Timeout::timeout 5 do
gets.chomp
end
rescue Timeout::Error
"Too slow!"
end
puts (dans1)
if dans1 == "1038"
puts "Very impressive!"
else
puts "Better luck next time..."
end
end
并调用该方法
> question
您没有在外部范围中设置dans1,因此它仅在块内部可见。我可能会像这样重新编写代码
puts "346*3?"
dans1 = begin
Timeout::timeout 5 do
gets.chomp
end
rescue Timeout::Error
"Too slow!"
end
puts dans1
if dans1 == "1038"
puts "Very impressive!"
else
puts "Better luck next time..."
end
如果您直接在控制台(即irb)中键入此项,则会出现问题,因为GET无法在您当前输入的代码块中工作!您需要做的是将代码保存到一个文件并加载该文件
> load 'where-my-file-is/my-file.rb'
然后代码就可以运行了。或者你可以把它放进一个方法中
def question
puts "346*3?"
dans1 = begin
Timeout::timeout 5 do
gets.chomp
end
rescue Timeout::Error
"Too slow!"
end
puts (dans1)
if dans1 == "1038"
puts "Very impressive!"
else
puts "Better luck next time..."
end
end
并调用该方法
> question
问题在于如何声明
dans1
变量。作为练习,试着在rescue中注释掉dans1=nil
行。突然:
in `<main>': undefined local variable or method `dans1' for main:Object (NameError)
在块内定义新变量时,它是“块局部变量”,这意味着它不存在于该块外。因此,块退出,然后put
尝试读取不存在的变量。您的代码首先工作的原因是因为rescue中的dans1=nil
行定义了put
可以看到的块之外的另一个dans1
。无论rescue
是否运行,此定义都会出现!!!关于Ruby,这是最令人困惑的事情之一:VM看到dans=nil
行并定义变量,即使赋值没有运行
要修复它,只需在块之前定义dans1
。块可以看到其范围之外的内容,因此它将重用该dans1
,而不是定义新的块局部变量
dans = nil
begin
...
问题在于如何声明
dans1
变量。作为练习,试着在rescue中注释掉dans1=nil
行。突然:
in `<main>': undefined local variable or method `dans1' for main:Object (NameError)
在块内定义新变量时,它是“块局部变量”,这意味着它不存在于该块外。因此,块退出,然后put
尝试读取不存在的变量。您的代码首先工作的原因是因为rescue中的dans1=nil
行定义了put
可以看到的块之外的另一个dans1
。无论rescue
是否运行,此定义都会出现!!!关于Ruby,这是最令人困惑的事情之一:VM看到dans=nil
行并定义变量,即使赋值没有运行
要修复它,只需在块之前定义dans1
。块可以看到其范围之外的内容,因此它将重用该dans1
,而不是定义新的块局部变量
dans = nil
begin
...
这解决了问题,但根本无法解释最初的问题是什么place@Max这个问题是关于“控制台不友好”的,我专门回答这个问题。作用域是附加的,但GET将不会在控制台中运行。这修复了问题,但根本无法解释第一个问题是什么place@Max这个问题是关于“控制台不友好”的,我专门回答这个问题。作用域是附加的,但GET不会在控制台中运行。