2013-09-01 7 views
-1

Я провел нелепое время, пытаясь понять, почему это висит. Я предполагаю, что это что-то делать с тем, как я отформатировал || для if заявление:Почему мой скрипт висит?

rods = { 
     :rod1 => [3,2,1], 
     :rod2 => [], 
     :rod3 => [] 
      } 

init_rod = gets.chomp.to_sym 
if ((init_rod != :rod1 || init_rod != :rod2) || init_rod != :rod3) 
    print "Type in \"rod1\", \"rod2\", or \"rod3\": " 
elsif rods[init_rod].empty? 
    print "Rod has no discs. Select another rod other than #{init_rod}: " 
else 
    disc = rods[init_rod].pop 
end 
+1

Возможно, вам нужна цепочка '&&', а не цепочка '||', потому что, если она не одна или нет, то другая, а не другая, поэтому она должна быть истинна, потому что, не будучи первой, не должны удовлетворять второй или третьей. –

+0

'if ((init_rod! =: Rod1 && init_rod! =: Rod2) && init_rod! =: Rod3)' –

+1

Или более идиоматический Ruby будет использовать массив и 'include?', Как в 'if! [: Rod1 ,: rod2,: rod3] .INCLUDE? init_rod' –

ответ

0

Он висит, потому что ты наставлял его ждать записи с gets.

Просто поставьте print заранее, или введите вслепую. Это будет работать.

Смежные вопросы