未定义的方法`has_key?'

时间:2015-09-18 21:21:05

标签: ruby

我的代码可能存在问题,而不是我试图使用未定义的方法。有人可以解释我做错了吗?

           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)

1 个答案:

答案 0 :(得分:1)

一些问题,主要是因为你是YML文件格式不正确。 104.156.244.109:需要有价值。 1.1.1.12.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”。