Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/redis/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Can';无法检查Ruby哈希是否包含值_Ruby_Hash - Fatal编程技术网

Can';无法检查Ruby哈希是否包含值

Can';无法检查Ruby哈希是否包含值,ruby,hash,Ruby,Hash,我有一个ruby哈希,看起来像 {"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) su

我有一个ruby哈希,看起来像

{"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”=>“尼克”,“127.0.0.1”=>“尼克1”}
1.9.3p125:002>h.has_值?(“尼克”)
=>正确
1.9.3p125:003>如果h.有_值(‘尼克’)
1.9.3p125:004?>输入“是”
1.9.3p125:005?>其他
1.9.3p125:006>放置“否”
1.9.3p125:007?>结束
对
=>零
1.9.3p125:008>

我做错了什么?

你应该检查一下你的正则表达式是如何工作的,我不会说哈希有什么问题。

我不确定你是否按照你想要的方式使用了“$1”

在这一行的代码中:

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

如果行是“尼克说了一大堆话”,那么1美元将是“说了一大堆话”。因此,您并不是在哈希中真正查找“nick”值,而是查找“says a bunch things”。

放入整个控制器代码,因为很多内容都不清楚。不清楚什么是
@nicks
nick
ip
以及您在哪里定义它们。谢谢,添加了相关代码,您在这里输入了什么?正则表达式是否正常工作?我不会说哈希有问题。检查if之前的
nick
值,看看发生了什么事情!当我在正则表达式中捕获它时,而不是将它添加到散列中时,我应该使用
$1.gsub(“\r”,”)
:如果您愿意,您可以发布答案,我将标记为正确;)不管怎么说,你第一次把东西放在那堆杂烩里是在哪儿?