我在 Ruby 中遇到线程问题。 这是我第一次使用 Threads,所以也许我遗漏了一些重要的东西。
我有这个程序:
def define_action(field)
false if field.nil? || field.empty?
puts field.empty? <---- ONLY FOR DEBUG
case field['special']
when 'signpost'
typewriter_animation(field['message'])
else
typewriter_animation("TO DO ... add action for #{field['special']}")
end
end
typewriter_animation
清理字段,输入文本并等待 5 秒,然后再次清除字段。
我在线程中使用
define_action
@timer = Thread.new do
@engine.define_action(@map.next_field_coordinates)
end
当
field
为 empty
(我在提示中看到 true
)时,我没有任何结果,但程序继续并在屏幕上打印“TO DO ...添加操作”
没有线程的相同代码可以完美工作,但显然会停止屏幕 5 秒。
我的代码有什么问题?
您的保护条款缺少
return
。
def define_action(field)
false if field.nil? || field.empty? # this line does nothing
...
end
大概应该是:
def define_action(field)
return false if field.nil? || field.empty?
...
end
我不明白线程有什么区别。
您必须将
return
添加到您的代码中,否则结果将不会传回😌