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酷,很高兴我能帮上忙。不要忘记接受答案(答案左边的绿色复选标记),无论哪个答案对你最有帮助。