2010-09-17 65 views
0

我使用的Watir和Ruby,試圖從Web應用程序發出聲音數據的加載到一個哈希:使用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,order [orderNumber]返回nil。

但是,如果我取消註釋放置orders.keys,它顯示爲散列中的一個鍵...?我超級困惑 - 我做錯了什麼?數據類型方面有點奇怪嗎?

乾杯

+0

F%$%$%$ ....是的,我通過將其更改爲行[1] .to_s – 2010-09-17 10:26:21

+1

確定它是否確定散列中的鍵是'1136050'(一個字符串)而不是1136050(一個整數,這會更有意義)。它們顯示的內容與字符串相同。 – mb14 2010-09-17 10:30:16

回答

2

看來你是存儲密鑰爲整數,並試圖找回它作爲一個字符串。您只需要保持一致(並且在存儲時將轉換添加到字符串中,或​​者在檢索時將其轉換爲int)。

2

當你正在做的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)