Возникли проблемы с хешами Ruby - PullRequest
0 голосов
/ 17 сентября 2010

Я использую Watir и Ruby, чтобы попытаться перегрузить загрузку данных из веб-приложения в хеш:

def getOrders( )

    return orders = slurpOrders()

end

def containsOrderNumber( orderNumber )
    puts orderNumber 
    orders = getOrders
    puts orders[orderNumber]
    #puts orders.keys

    puts "orders has_key? = " + orders.has_key?(orderNumber).to_s
    return orders.has_key?(orderNumber)

end

private
def slurpOrders( ) 

    puts @browser.tables[6].row_count

    rows = @browser.tables[6].rows

    orders = Hash.new

    for row in rows do
        #puts row.column_count
        if row.column_count == 8 then
            order = {
                :sales_channel => row[2],
                :customer => row[3],
                :country => row[4],
                :total => row[5],
                :time => row[6],
                :highlight => row[7],
                :credit_hold => row[8],
            }
            orders[ row[1] ] = order

            #puts row[1]

        end
    end

    return orders

end

Поэтому я вызываю containsOrderNumber ('1136050') в другом сценарии, ноorders.has_key?возвращает false, а orders [orderNumber] возвращает nil.

Однако, если я раскомментирую, помещает orders.keys, он появляется как один из ключей в хеше ...?Я очень запутался - что я делаю не так?Что-то странное происходит с типом данных?

Cheers

Ответы [ 2 ]

2 голосов
/ 22 сентября 2010

Когда вы выполняете отладку printf, убедитесь, что вы не используете

puts orders.keys

, но используйте

puts orders.keys.inspect

, так как inspect позволит вам различать целые истроки:

hash = {"1" => :string, 2 => :integer}
puts hash.keys # Outputs 1(newline)2(newline)
puts hash.keys.inspect # Outputs ["1", 2](newline)
2 голосов
/ 17 сентября 2010

Кажется, вы храните ключ как целое число и пытаетесь получить его как строку. Вам просто нужно быть последовательным (и добавлять преобразование в строку при сохранении или преобразование в int при извлечении).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...