2012-04-08 51 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'的值,而是'说很多事情'。

相关问题