Ruby数组的打印内容
我想知道为什么数组即使不告诉也会打印内容。这里有一个例子,因为我不善于解释Ruby数组的打印内容,ruby,Ruby,我想知道为什么数组即使不告诉也会打印内容。这里有一个例子,因为我不善于解释 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:
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
def连接(主机)
开始
sock=Socket.new(:INET,:STREAM)
sockaddr=Socket.sockaddr_in(23,主机)
如果sock.connect(sockaddr),则将“Telnet在#{host}\n上可用”
救援错误号::ECONREFUNCED
将“Telnet在#{host}上不可用”
结束
结束
def扫描
@host=str_r(@host)#格式化IP
(1..255)。每个月|
开始
nhost=@host+10月至
@数组在此代码中的工作方式:
(1..20).each do |p|
array << method(p)
end
。。。然后使用eval
语句执行它
eval array[0] # will evaluate the string in array[0] as ruby code.
您可能还需要查找PROC和lambda,它们是在变量中存储程序代码的一种更灵活的方法。它在该代码中的工作方式:
(1..20).each do |p|
array << method(p)
end
。。。然后使用eval
语句执行它
eval array[0] # will evaluate the string in array[0] as ruby code.
您可能还需要查找PROC和lambda,它们是在变量中存储程序代码的更灵活的方法。根据更新,有两个问题:
在connect
方法中确实有一些put
语句,在给定方法流的情况下,不管怎样,这些语句总是会输出一些东西
在ruby中,方法中的最后一条语句是该方法返回的值。put
方法不返回任何内容,put
是该方法的最后一行(即使它掉到了rescue块中)。您可以尝试重写该方法,使所需的值是最后一次(可能比较混乱),或者只需在末尾添加return[something]
,以确保返回所需的值(其中[something]
是要返回的变量)
另外,我想谈谈你在评论中的陈述:我真的不明白为什么要打印出来,即使我只是把它全部推到和数组中
需要记住的关键是,这是两个独立的操作:首先,调用方法……然后将返回值推送到数组。该方法不知道其返回值的去向,因此这些put
语句将被执行,除非您在方法中放入一些内容来过滤它们(如if
语句,您至少已经有过一次,看起来像这样)。根据更新,有两个问题:
在connect
方法中确实有一些put
语句,在给定方法流的情况下,不管怎样,这些语句总是会输出一些东西
在ruby中,方法中的最后一条语句是该方法返回的值。put
方法不返回任何内容,put
是该方法的最后一行(即使它掉到了rescue块中)。您可以尝试重写该方法,使所需的值是最后一次(可能比较混乱),或者只需在末尾添加return[something]
,以确保返回所需的值(其中[something]
是要返回的变量)
另外,我想谈谈你在评论中的陈述:我真的不明白为什么要打印出来,即使我只是把它全部推到和数组中
需要记住的关键是,这是两个独立的操作:首先,调用方法……然后将返回值推送到数组。该方法不知道其返回值的去向,因此这些put
语句将被执行,除非您在方法中放入一些内容来过滤它们(如if
语句,看起来至少已经有一次了)。在
ary在文章中说
这里没有打印代码。也许有一些印刷正在进行的方法。你的意思是IRB?IRB总是略微显示代码编辑的第一篇文章的返回值。即使方法内部有打印,我仍然不明白它为什么打印。我实际上并没有调用该方法,只是将其推入一个数组中。对吗?不,它不是IRB。@user3674736它确实在调用这个方法,是什么让你认为它不是?具体来说,使用参数p
调用该方法,并将该方法的返回值推送到数组中。是的,这就是我的意思。返回值被推入数组。所以在我调用数组之前什么都不能打印,对吗?这里没有打印代码。也许有一些印刷正在进行的方法。你的意思是IRB?IRB总是略微显示代码编辑的第一篇文章的返回值。即使方法内部有打印,我仍然不明白它为什么打印。我实际上并没有调用该方法,只是将其推入一个数组中。对吗?不,它不是IRB。@user3674736它确实在调用这个方法,是什么让你认为它不是?具体来说,使用参数p
调用该方法,并将该方法的返回值推送到数组中。是的,这就是我的意思。返回值被推入数组。所以在我调用数组之前不应该打印任何内容,对吗?谢谢,这似乎就是我要找的。@user3674736很酷,很高兴我能帮上忙。别忘了接受答案(答案左边的绿色复选标记),无论哪个答案对你最有帮助。谢谢你这似乎就是我要找的。@user3674736酷,很高兴我能帮上忙。不要忘记接受答案(答案左边的绿色复选标记),无论哪个答案对你最有帮助。