Та же процедура не работает, вызывается в потоке - PullRequest
0 голосов
/ 30 января 2019

У меня проблема с Thread в 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 ... добавить действие»

Тот же код без Thread работает отлично, но, очевидно, остановит экран на 5 секунд.

Что не так в моемкод

1 Ответ

0 голосов
/ 30 января 2019

В вашем пункте охраны отсутствует 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

Я не понимаю, как потоки будут иметь значение.

...