Can';无法检查Ruby哈希是否包含值
我有一个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
{"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”,”)
:如果您愿意,您可以发布答案,我将标记为正确;)不管怎么说,你第一次把东西放在那堆杂烩里是在哪儿?