在线程中调用相同的过程不起作用

问题描述 投票:0回答:2

我在 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 秒。

我的代码有什么问题?

ruby multithreading libgosu
2个回答
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

我不明白线程有什么区别。


1
投票

您必须将

return
添加到您的代码中,否则结果将不会传回😌

© www.soinside.com 2019 - 2024. All rights reserved.