Ruby 块

Ruby块

模块的工作原理就像一个方法,但它没有一个名字。它不属于任何对象。也可以视为未指定的代码块,它们可以消耗参数形式的输入并返回一些值。最重要的是,只有在调用方法并且使用yield语句将值与值一起调用方法内部的块时,才能通过将块传递给方法的方式来创建块。

考虑以下代码,

7.times do
  puts "Oh, hello from inside a block. You are at Nhooo!"
end

输出结果

Oh, hello from inside a block. You are at Nhooo! 
Oh, hello from inside a block. You are at Nhooo! 
Oh, hello from inside a block. You are at Nhooo! 
Oh, hello from inside a block. You are at Nhooo! 
Oh, hello from inside a block. You are at Nhooo! 
Oh, hello from inside a block. You are at Nhooo! 
Oh, hello from inside a block. You are at Nhooo!

您可以在上面的代码中观察到time是一种在数字上定义的方法。7.times将表达式打印7次。

调用times方法时,仅传递一个块,该块是do和end语句之间的已命名代码块。

没有对象参与方法时间。

块的实现

1)在do ... end语句中

这是该块的最常见用法。代码的主要部分具有这种类型的实现。

语法:

    name_of_block  do 
        #expression-1  
        #expression-2  
    end

示例

["C++", "Ruby", 155,"Nhooo","Java","Python",789,889.6].each do |k|    
    puts k    
end

输出结果

C++
Ruby
155
Nhooo
Java
Python
789
889.6

2)花括号{}之间(内联实现)

无需do ... end语句即可执行以上操作。可以通过将表达式放在花括号{}中来完成相同的操作。

语法:

    name_of_the_block{ #expression_to_be_executed }

示例

["C++", "Ruby", 155,"Nhooo","Java","Python",789,889.6].each {|k|    
 puts k }

输出结果

C++
Ruby
155
Nhooo 
Java
Python
789
889.6

3)收益表

当您想在方法内部调用一个块时,Ruby为此提供了yield语句。当您在方法内部调用一个块时,将使用关键字yield。

yield语句还可以使用参数。

示例

# 方法Nhooo
    def Nhooo 	
    # 要执行的表达式 
    puts "Inside Nhooo!"
    	# 使用yield语句 
    	# 教程是参数 
    	yield "Tutorial"
    
    # 要执行的表达式 
    puts "Again Inside Nhooo!"
    
    # 使用收益声明 
    # Nhooo.com上的教程是参数 
    yield "Tutorial at Nhooo.com"
end

# 块 
Nhooo{ |example| puts "Inside Block #{example}"}

输出结果

Inside Nhooo!
Inside Block Tutorial
Again Inside Nhooo!
Inside Block Tutorial at Nhooo.com

在上面的代码中,您可以观察到,首先,调用了显示Nhooo的方法表达式。之后,当yield语句被找到并执行时,指针进入block内部以执行其语句。成功执行后,指针将返回该方法,该方法将从调用yield语句的位置继续执行。