Ruby Array打印为字符串

时间:2014-08-28 23:00:31

标签: ruby

这段代码应该循环遍历IP地址数组并检查端口是否打开。

class Ranger

def initialize(port,file)
    @port = port
    @file = file
    @arr = []
end


def regex(f)
    reg = IO.read(f)
    reg.scan /(?:\d{1,3}\.){3}\d{1,3}/
end


def fileread
        if File.exists?(@file)
            @arr << regex(@file).to_s

            begin
                @arr.each do |ip|
                    sock = Socket.new(:INET, :STREAM)
                    sockaddr = Socket.sockaddr_in(@port, ip.to_i)

                    puts "Host: #{ip}:#{@port} Open" if sock.connect(sockaddr)

                    next

                end

            rescue Errno::ECONNREFUSED
                false
            end
        end
end

除了一件事,代码似乎几乎完全有效。它打印出成功文本,即#34;主持人:#{ip}:#{@ port}打开&#34;。问题是它打印出#{ip}所在的整个数组,如下所示:[&#34; xx.xx.xx.xx&#34;,&#34; xx.xx.xx.xx&#34; ,&#34; xx.xx.xx.xx&#34;]:22打开。

它似乎与脚本中的.to_s和.to_i有关,但如果没有这些,它就完全无法工作。

1 个答案:

答案 0 :(得分:0)

从我所看到的你只是在@arr变量中添加一个东西......

@arr << regex(@file).to_s

regex()调用string.scan()返回一个数组(可能是你的3个IP

然后你将数组转换为字符串并将字符串附加到@arr。

要么

@arr = regex(@file) # replace

@arr += regex(@file) # concatenate