我的代码可能存在问题,而不是我试图使用未定义的方法。有人可以解释我做错了吗?
dest_ip = 2.2.2.2
dest_port = 4444
def check_db(ip,port)
#is this target recorded?
targets = YAML.load_file('targets.yml')
if (targets[ip] || {}).include? port
puts "\nThis target exists already!!\n"
else
puts "\nThis target does NOT exist!!\n"
end
end
check_db(dest_ip,dest_port)
我的targets.yml
文件看起来像这样
69.39.239.151:
- 7777
- 8677
69.39.239.75:
- 9677
- 9377
209.15.212.147:
- 8477
- 7777
104.156.244.109:
1.1.1.1: 8888
2.2.2.2: 4444
我收到此错误:
$ ruby test.rb
test.rb:9:in `<main>': undefined method `has_key?' for 4444:Fixnum (NoMethodError)
答案 0 :(得分:1)
一些问题,主要是因为你是YML文件格式不正确。 104.156.244.109:
需要有价值。 1.1.1.1
和2.2.2.2
需要将数组作为其值而非数值。将您的YML文件更改为此(我为104.156.224.109
创建了一个值,您应该没问题:
69.39.239.151:
- 7777
- 8677
69.39.239.75:
- 9677
- 9377
209.15.212.147:
- 8477
- 7777
104.156.244.109:
- 9999
1.1.1.1:
- 8888
2.2.2.2:
- 4444
您收到的错误是因为target['2.2.2.2']
按字面意思4444
返回,这是一个不响应include?
的Fixnum。或者换句话说,你的代码期望返回一个数组,并且你返回一个整数。
另外,至少在我看来,我不得不在红宝石代码中引用“2.2.2.2”。