내가 특정 문자열이 해시 이미 있는지 확인하기 위해 관리 할 수 없습니다 은 루비 해시 값
{"10.1.1.6"=>"nick", "127.0.0.1"=>"nick1"}
그러나
처럼 보이는 루비 해시가 포함 된 경우 확인 관리 할 수 없습니다. 나는has_value?
을 시도했는데 을 사용하여 값의 배열을 얻었고
include?
을 사용하여 그 값이 포함되어 있는지 확인했지만 항상 존재한다고 알 때 항상
false
을 반환합니다. 예를 들어, 내가 해시에
"172.16.10.252"=>"nick"
를 추가하려고 내가 할 :
irb
에
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
내가 잘못하지
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 >
무엇은 잘 작동하지만 내 스크립트에합니까?
많은 것들이 불분명하기 때문에 전체 컨트롤러 코드를 넣으십시오. '@ nicks','nick','ip'가 무엇인지, 어디서 정의 할 수 있는지는 명확하지 않습니다. 덕분에 – shime
이 완료되었으며 관련 코드 – pmerino
이 추가되었으며 여기에 입력 한 내용은 무엇입니까? 정규 표현식이 올바르게 작동합니까? 나는 해시에 문제가 있다고 말하지 않을 것이다. if 앞에있는 'nick'값을 검사하여 어떤 일이 발생하는지 확인하십시오. – shime