Ruby 块

  • 您已经了解了Ruby是如何定义方法的,可以在其中放置大量语句,然后调用该方法。同样,Ruby也具有块的概念。
    • 一个块由代码块组成。
    • 您为块分配名称。
    • 块中的代码始终括在大括号({})中。
    • 始终使用与该块同名的函数调用该块。这意味着,如果您有一个名为test的块,则可以使用函数test来调用该块。
    • 您可以使用yield语句调用一个块。
    语法
    
    block_name {
       statement1
       statement2
       ..........
    }
    
    在这里,您将学习使用简单的yield语句来调用一个块。您还将学习使用带有参数的yield语句来调用块。您将使用两种yield语句检查示例代码。
  • yield 代码块

    让我们看一下yield语句的示例-
    
    def test
       puts "你在方法中"
       yield
       puts "您再次回到方法"
       yield
    end
    test {puts "你在块中"}
    
    尝试一下
    您还可以使用yield语句传递参数。这是一个例子-
    
    def test
       yield 5
       puts "您正在方法test中"
       yield 100
    end
    test {|i| puts "你在块 #{i} 中"}
    
    尝试一下
    在这里,yield语句被写在参数后面。您甚至可以传递多个参数。在该块中,将变量放置在两条垂直线(||)之间以接受参数。因此,在前面的代码中,yield 5语句将值5作为参数传递给测试块。现在,看下面的语句-
    
    test {|i| puts "你在块中 #{i}"}
    
    在此,在变量i中接收值5 。现在,观察以下puts语句-
    
    puts "你在块中 #{i}"
    
    该puts语句的输出为-
    
    你在块中 5
    
    如果要传递多个参数,那么yield语句将变为-
    
    yield a, b
    
    并且块是-
    
    test {|a, b| statement}
    
    参数将以逗号分隔。
  • 块和方法

    您已经了解了块和方法如何相互关联。通常,您可以通过使用yield语句从与该块同名的方法中调用该块。因此,您写-
    
    def test
       yield
    end
    test{ puts "Hello world"}
    
    尝试一下
    该示例是实现块的最简单方法。您可以使用yield语句调用测试块。但是,如果方法的最后一个参数以&开头,则可以将一个块传递给该方法,并且该块将分配给最后一个参数。如果*和&都出现在参数列表中,则&应该稍后出现。
    
    def test(&block)
       block.call
    end
    test { puts "Hello World!"}
    
    尝试一下
  • BEGIN和END块

    每个Ruby源文件都可以声明要在文件加载时(BEGIN块)和程序完成执行后(END块)运行的代码块。
    
    BEGIN { 
       # BEGIN block code 
       puts "BEGIN code block"
    } 
    
    END { 
       # END block code 
       puts "END code block"
    }
       # MAIN block code 
    puts "MAIN code block"
    
    尝试一下
    一个程序可以包含多个BEGIN和END块。BEGIN块按遇到的顺序执行。END块以相反的顺序执行。