2012-04-08 19 views
0

我有一個Ruby散列,它看起來像無法管理檢查,如果一個Ruby的Hash包含一個值

{"10.1.1.6"=>"nick", "127.0.0.1"=>"nick1"} 

但我不能管理檢查,如果某些字符串已經在哈希值。我試過has_value?,讓使用values然後使用include?檢查它是否包含它的值數組,但總是返回false,當我知道它的存在。例如,我嘗試添加"172.16.10.252"=>"nick"到哈希和我做的:

class SomeClass 
    def initialize(*args) 
    super(*args) 
    @nicks = Hash.new 
    end 

    def serve(io) 
    loop do 
     line = io.readline 
     ip = io.peeraddr[3] 
     begin 
     if /NICK (.*)/ =~ line 
      nick = $1 
      if @nicks.has_value?(nick) # it fails here 
      puts "New nick #{$1}" 
      @nicks[ip] = nick.gsub("\r", "") 
      io.puts "Your new nick is #{nick}" 
      else 
      message = {:ERROR => "100", :INFO=>"#{nick}"}.to_json 
      io.puts message 
      end 
     end 
     rescue Exception => e 
     puts "Exception! #{e}-#{e.backtrace}" 
     end 
    end 
    end 
end 

irb它工作正常,但在我的腳本它不

1.9.3p125 :001 > h = {"10.1.1.6"=>"nick", "127.0.0.1"=>"nick1"} 
=> {"10.1.1.6"=>"nick", "127.0.0.1"=>"nick1"} 
1.9.3p125 :002 > h.has_value?('nick') 
=> true 
1.9.3p125 :003 > if h.has_value?('nick') 
1.9.3p125 :004?> puts "yes" 
1.9.3p125 :005?> else 
1.9.3p125 :006 >  puts "no" 
1.9.3p125 :007?> end 
yes 
=> nil 
1.9.3p125 :008 > 

我做錯了嗎?

+0

把整個控制器代碼,因爲很多東西還不清楚。目前還不清楚「@ nicks」,「nick」和「ip」是什麼,你在哪裏定義它們。感謝 – shime 2012-04-08 10:20:48

+0

完成後,加入相關的代碼 – pmerino 2012-04-08 10:27:43

+0

,什麼是你在這裏輸入的輸入?正則表達式工作正常嗎?我不會說哈希有問題。檢查前面的'nick'值,看看會發生什麼 – shime 2012-04-08 10:40:39

回答

0

您應該檢查你的正則表達式是如何工作的,我不會說什麼是錯的哈希值。

2

我不知道,如果你正在使用「$ 1」你打算的方式。

在你的代碼在這一行:

if /NICK (.*)/ =~ line 
    nick = $1 
    if @nicks.has_value?(nick) # it fails here 
     puts "New nick #{$1}" 

如果行是「尼克說了一堆東西」,$ 1會說:「一堆東西」。所以你並不是真的在你的散列中尋找'nick'的值,而是'說很多事情'。

相關問題