2015-06-15 2 views
-1

У меня есть скрипт, который имеет вложенный цикл, чтобы проверить, соответствует ли ID в массиве идентификатор динамического набора объектов. Я попытался поместить некоторый код в самую внутреннюю инструкцию if в качестве другой, и он полностью пропускает все и все код, который я помещал между остальным и концом.Ruby skipping else

На боковой ноте я попытался поставить код перед оператором if, и он также пропустил это, но я не беспокоюсь об этом прямо сейчас.

Таким образом, остается вопрос, почему ruby ​​пропускает раздел else кода.

Предположим, что мы имеем действительный массив для треков

WORK_SIZE = 10 
countries = %w(US GB CA) 
countries.each do | country | 
    print "Querying #{country} for #{tracks.count} tracks " 
    counter = 0 
    found = 0 
    tracks.dup.each.each.slice(WORK_SIZE) do | subtracks | 
    ids = subtracks.map { | track | track.id } 
    hash = JSON.parse(open("http://jsonresults").read) 
    print '*' 
    hash['results'].each do | result | 
     result_id = result['trackID'] 

     print 'a'         # Any code here gets skipped (prob 2) 

     subtracks.each do | track | 

     print 'b'         # Any code here gets skipped (prob 2) 

     if result_id == track.iTunes_id 
      found += 1 
      callfunction() 
     else 

      print 'c'        # Any code here gets skipped 
                # Main problem is here 
     end 
     end 
    end 
    end 
    print " #{found} tracks found" 
    print " #{counter} updated\n" 
    break if tracks.empty? 
end 

Пример вывода:

Reading 3 tracks 
Found 3 tracks 
Querying US store for 3 tracks * 0 track(s) found 0 updated 
Querying GB store for 3 tracks * 0 track(s) found 0 updated 
Querying CA store for 3 tracks * 0 track(s) found 0 updated 
Querying AU store for 3 tracks * 0 track(s) found 0 updated 
Couldn't match ids for 3 tracks 
+11

Вы уверены, что 'hash ['results']' содержит какие-либо предметы? – mipadi

+3

Можете ли вы уменьшить это до образца кода, чтобы мы могли работать? Вряд ли кто-то сможет помочь иначе - в лучшем случае вы догадаетесь, что может произойти неправильно. – matt

+0

'tracks.dup.each.each' является ли он законным? серьезно, реорганизуйте этот код :) – AKovtunov

ответ

0

Несмотря на то, hash['results'] обычно имеет данные, следы я использовал не в результатах JSon (go figure), поэтому hash[] был полностью пуст. Другими словами, else так и не был достигнут.

Это объясняет все проблемы, которые у меня были.

Чтобы сделать что-либо с треками, которые не совпадали, я закончил тем, что поставил петлю внутри оператора if после того, как другие результаты были исчерпаны.

... 
    print " #{found} tracks found" 
    print " #{counter} updated\n" 
    break if tracks.empty? 
end 

if tracks.count != 0 
    puts "Couldn't find data for #{tracks.count} tracks" 
    tracks.each do | track | 
     track.notfound() 
    end 
end