I have a problem with Thread in Ruby. It's the first time I use Threads, so maybe I omit something important.
I have this procedure:
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
clean a field, puts a text and wait 5 seconds before clear field again.
I use define_action
in a Thread
@timer = Thread.new do
@engine.define_action(@map.next_field_coordinates)
end
When field
is empty
(i see true
in prompt) I except nothing as result, but the procedure continue and print on screen "TO DO ... add action for"
The same code without Thread work perfectly, but obviously stop screen for 5 seconds.
What's wrong in my code?
Your guard clause is missing a return
.
def define_action(field)
false if field.nil? || field.empty? # this line does nothing
...
end
Should probably be:
def define_action(field)
return false if field.nil? || field.empty?
...
end
I don't see how threads would make any difference.