我想知道为什么数组即使不告诉也会打印内容。这是一个示例,因为我不善于解释。
def connect(host)
begin
sock = Socket.new(:INET, :STREAM)
sockaddr = Socket.sockaddr_in(23, host)
puts "Telnet available on #{host}\n" if sock.connect(sockaddr)
rescue Errno::ECONNREFUSED
puts "Telnet unavailable on #{host}"
end
end
def scan
@host = str_r(@host) # Formats IP
(1..255).each do |oct|
begin
nhost = @host+oct.to_s
@array << connect(nhost)
rescue Errno::EHOSTUNREACH
#puts "Host #{nhost} unreachable!"
end
end
#puts @array
end
方法循环在哪里做类似尝试连接到主机的事情。即使我没有告诉它“放入”任何东西,它也可以。它将方法(p)的结果一一列出。我希望将所有结果保存到一个数组中,然后在尝试连接到所有主机后将它们全部打印在最后。'<<'运算符不是简单地将任何内容添加到数组中吗?
基于此更新,存在两个问题:
您确实puts
在connect
方法中确实有一些语句,给定方法的流程,无论如何,它们始终将输出某些内容。
在ruby中,方法中的最后一条语句是该方法返回的值。该puts
方法不返回任何内容,并且puts
是方法的最后一行(即使它落入了救援块)。您可以尝试重写该方法,使所需的值是上次(可能是混乱的),也可以return [something]
在末尾简单添加,以确保返回了所需的值(要返回[something]
的变量在哪里)。
另外,只是为了解决您在评论中的发言:即使我只是将所有内容都推送到了array中,我真的不明白为什么要打印出来。
要记住的关键是这是两个单独的操作:首先,该方法被称为...当返回值被推入数组时。该方法不知道其返回值将到达何处,因此这些puts
语句无论如何都将执行,除非您在该方法中放入了一些内容以对其进行过滤(例如一条if
语句,您已经至少有一次,看起来像)。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句