Ruby教程
Ruby控制语句
Ruby高级

Ruby Blocks

Ruby Blocks

Ruby 代码块在其他编程语言中称为闭包。它由一组代码组成,这些代码总是用大括号括起来或写在do..end 之间。 大括号语法总是比 do..end 语法具有更高的优先级。大括号优先级高,do优先级低。
一个块有两种写法,
do 和 end 之间的多行(多行块是 niot 内联的) 大括号之间的内联{}
两者都是一样的,具有相同的功能。
要调用一个块,你需要有一个与块同名的函数。
A块总是用一个函数调用。块可以有自己的参数。
语法:
block_name{
   statement1
   statement2
   ..........
}
示例:
以下示例显示了多行块。
[10, 20, 30].each do |n| 
 puts n 
end 
输出:
Ruby Blocks 1

下面的示例显示了 <强> 内联块。
[10, 20, 30].each {|n| puts n}
输出:
Ruby Blocks 2


yield 语句

yield 语句用于调用具有值的方法中的块。
示例:
#!/usr/bin/ruby 
def met 
   puts "this is method" 
   yield 
   puts "You will be back to method" 
   yield 
end 
met {puts "this is block"}
输出:
Ruby Blocks 3

虽然met 方法,当我们到达 yield 行时,块内的代码被执行。块执行完成后,met 方法的代码继续。
yield 语句传递参数
yield 语句可以传递一个或多个参数.
示例:
#!/usr/bin/ruby 
def met 
   yield 1 
   puts "this is method" 
   yield 2 
end 
met {|i| puts "this is block #{i}"} 
输出:
Ruby Blocks 4


块变量

我们可以在块参数的外部和内部使用相同的变量。让我们看看下面的例子。
例子:
#!/usr/bin/ruby 
    x = "outer variable"  
    3.times do |x|  
      puts "Inside the block: #{x}"  
    end  
    puts "Outside the block: #{x}"
输出:
Ruby Blocks 5

在这个例子中,我们在块内使用相同的变量作为块参数 x,在块外使用相同的变量作为变量 x。

BEGIN 和 END 块

Ruby BEGIN 和 END 块分别用于声明文件正在加载和文件已加载。
示例:
#!/usr/bin/ruby 
BEGIN { 
  puts "code block is being loaded" 
} 
END { 
  puts "code block has been loaded" 
} 
puts "this is the code block"
输出:
Ruby Blocks 6


与号参数(&block)

&block 是一种将块的引用(而不是局部变量)传递给方法的方法。
这里,& 后面的块词只是引用的名称,可以使用任何其他名称代替此名称。
示例:
def met(&block) 
  puts "this is method" 
  block.call 
end 
met { puts "this is &block example" } 
输出:
Ruby Blocks 7

这里是块变量内部方法 met 是对块的引用。它是通过调用方法执行的。 call方法和yield方法一样。

使用默认值初始化对象

Ruby 有一个名为 yield(self) 的初始化程序。这里,self 是被初始化的对象。
示例:
class Novel 
  attr_accessor :pages, :category 
  def initialize 
    yield(self) 
  end 
end 
novel = Novel.new do |n| 
  n.pages = 564 
  n.category = "thriller" 
end 
puts "I am reading a #{novel.category} novel which has #{novel.pages} pages." 
输出:
Ruby Blocks 8

昵称: 邮箱:
Copyright © 2022 立地货 All Rights Reserved.
备案号:京ICP备14037608号-4