0

我对 Ruby 中的 Thread 有疑问。这是我第一次使用线程,所以也许我省略了一些重要的东西。

我有这个程序:

  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 ... add action for”

没有 Thread 的相同代码可以完美运行,但显然会停止屏幕 5 秒。

我的代码有什么问题?

4

1 回答 1

3

您的保护条款缺少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

我看不出线程会有什么不同。

于 2019-01-30T13:56:04.520 回答