Ruby中的块的知识

   这篇文章主要介绍了详解Ruby中的块的知识,包括yield语句和begin/end块等知识点,需要的朋友可以参考下

  语法:

  ?

1
2
3
4
5

block_name{
statement1
statement2
..........
}

  在这里,将学习如何通过使用一个简单的 yield 语句调用块。还将学习使用yield语句具有参数调用块。将检查的示例代码,这两种类型的 yield 语句。

  yield 语句:

  让我们来看看在yield语句的一个例子:

  ?

1
2
3
4
5
6
7
8
9

#!/usr/bin/ruby
 
def test
puts "You are in the method"
yield
puts "You are again back to the method"
yield
end
test {puts "You are in the block"}

  这将产生以下结果:

  ?

1
2
3
4

You are in the method
You are in the block
You are again back to the method
You are in the block

  也可以通过参数与屈服声明。下面是一个例子:

  ?

1
2
3
4
5
6
7
8

#!/usr/bin/ruby
 
def test
yield 5
puts "You are in the method test"
yield 100
end
test {|i| puts "You are in the block #{i}"}

  这将产生以下结果:

  ?

1
2
3

You are in the block 5
You are in the method test
You are in the block 100

  这里的 yield 语句写到后面跟着参数。甚至可以传递多个参数。在该块中放置在两条垂直线之间的变量(| |)接收的参数。因此,在上面的代码中,yield5语句将试块作为一个参数值5。

  现在看看下面的语句:

  ?

1

test {|i| puts "You are in the block #{i}"}

  在这里,在变量i中的值为5。现在遵守以下 puts 语句:

  ?

1

puts "You are in the block #{i}"

  puts 语句的输出是:

  ?

1

You are in the block 5

  如果想超过一个参数,然后yield语句就变成了:

  ?

1

yield a, b

  那么块是:

  ?

1

test {|a, b| statement}

  这些参数将用逗号隔开。

  块和方法:

  我们已经看到了如何将一个块和方法关联。通常调用块从块具有相同名称的方法,通过使用yield语句。因此,编写:

  ?

1
2
3
4
5
6

#!/usr/bin/ruby
 
def test
yield
end
test{ puts "Hello world"}

  这个例子是最简单的方式来实现一个块。调用块 test 使用yield语句。

  但是,如果最后一个参数的方法前面加上&,那么可以通过一个块这种方法,此块将被分配到最后一个参数。

  *和&在参数列表中&还在后面。

  ?

1
2
3
4
5
6
7
8
9
10

#!/usr/bin/ruby
 
def test(&block)
block.call
end
test { puts "Hello World!"}
 
This will produce following result:
 
Hello World!

  BEGIN 和 END 块

  每一个Ruby源文件都可以声明的代码块作为文件被加载运行(BEGIN块)后,该程序已执行完毕(END块)。

  ?

1
2
3
4
5
6
7
8
9
10
11
12
13

#!/usr/bin/ruby
 
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块以相反的顺序执行。上述程序执行时,会产生以下结果:

  ?

1
2
3

BEGIN code block
MAIN code block
END code block

时间: 2024-10-31 14:40:52

Ruby中的块的知识的相关文章

Ruby中的block代码块学习教程_ruby专题

1.什么是代码块在Ruby中,{}或do...end之间的代码是一个代码块.代码块只能出现在一个方法的后边,它紧接在方法最后一个参数的同一行上,由yield关键字调用.例如: [1,2,3,4,5].each { |i| puts i } [1,2,3,4,5].each do |i| puts i end 块变量:以yield关键字调用block也可以传递参数,block中竖线(|)之间给出的参数名用于接收来自yield的参数.  竖线之间(如上例中的 | i |)的变量被称作块变量,作用和一

详解Ruby中的代码块及其参数传递_ruby专题

一,块的声明   块的声明在函数调用之后,用{..}括起来,或do..end封装.{}一般用在单行语句上,do..end用在多行语句上. (1..4).each{|v| print "#{v} "} #输出1 2 3 4   块可以带参数,与函数参数不同,块参数用||封装,当然,可以带多个参数.这些参数怎么定义,实际上是在函数内部定义好的,后面会讲到. 二,块内变量的访问   块内可以访问块外的变量,也就是块外的变量在块内是可见的,如 sum = 0 (1..5).each do |v

深入理解Ruby中的代码块block特性_ruby专题

block是什么? 在Ruby中,block并不罕见.官方对block的定义是"一段被包裹着的代码".当然,我觉得这样的解释不会让你变的更明白. 对block的一种更简单的描述是"一个block就是一段存储在一个变量中的代码,它和其他的对象一样,可以被随时的运行" 然后,咱们通过看一些代码,之后再把这些代码重构成Ruby中的block形式.通过代码来实际的感受,更加直观. 比如,对两个数做加法? puts 5 + 6 # => 11 嗯,这样写是可以的.但是,

介绍Ruby中的模块与混合类型的相关知识

  这篇文章主要介绍了Ruby中的模块与混合类型的相关知识,包括平常人们常说的多态与继承等相关知识点,需要的朋友可以参考下 模块是组合在一起的方法,类和常量.模块两个主要好处: 模块提供了一个命名空间,并避免名称冲突. 模块实现混合工厂. 模块定义了一个命名空间,一个沙箱中方法和常量可以自由使用,而不必担心踩到其他的方法和常数. 语法: ? 1 2 3 4 5 module Identifier statement1 statement2 ........... end 就像被命名为类常量模块中

深入理解JavaScript中的块级作用域、私有变量与模块模式_基础知识

本文详细的介绍了JavaScript中的块级作用域.私有变量与模块模式,废话就不多说了,具体如下: 1.块级作用域(私有作用域),经常在全局作用域中被用在函数外部,从而限制向全局作用域中添加过多的变量和函数. (function(count){ for(var i=0;i<count;i++){ console.log(i);//=>0.1.2.3.4 } console.log(i);//=>5 })(5); (function(){ var now=new Date(); if(no

介绍Ruby中的模块与混合类型的相关知识_ruby专题

模块是组合在一起的方法,类和常量.模块两个主要好处:     模块提供了一个命名空间,并避免名称冲突.     模块实现混合工厂. 模块定义了一个命名空间,一个沙箱中方法和常量可以自由使用,而不必担心踩到其他的方法和常数. 语法: module Identifier statement1 statement2 ........... end 就像被命名为类常量模块中的常量,首字母大写.定义的方法看起来很相似,模块定义方法就像类的方法. 调用一个模块方法和类方法一样,通过模块的名称它名字前,引用一

Ruby中关于模块的一些基础知识_ruby专题

模块与类很相似,它也可以说成是"不能被实例化的类".由于Class类是Module类的子类,所以说成是"类=模块+实例化能力"也许更好. 所谓模块,究竟是用来干什么的呢?其作用主要有两大类:Mix-in和命名空间. Mix-in实际上是受限制的多重继承.利用实际做成的继承关系,可以实现对某些类进行一些"点缀"的目的.事实上,Mix-in这种说法就来自于在冰激凌上面的饼干或者坚果. 在面向对象设计的历史中,由多重继承机制造成的问题早已众所周知了.所

详细解析Ruby中的变量

这篇文章主要介绍了详细解析Ruby中的变量,是Ruby学习中最基础的知识之一,需要的朋友可以参考下 变量持有要使用的程序的数据的存储位置. Ruby支持的有五种类型的变量.在前面的章节中已经经历了一个简短描述以及这些变量.本章中介绍的这五种类型的变量. Ruby的全局变量: 全局变量以$开头.未初始化的全局变量的值是零,并使用-w选项产生警告. 全局变量的赋值会改变全局状态.这是不推荐使用全局变量.他们使得程序的含义模糊. 下面是一个例子显示使用全局变量. ? 1 2 3 4 5 6 7 8 9

Ruby中数组的一些相关使用方法

  这篇文章主要介绍了Ruby中数组的一些相关使用方法,是Ruby学习当中的基础知识,需要的朋友可以参考下 Ruby数组是有序的,任何对象的??整数索引的集合.每个数组中的元素相关联,并提到的一个索引. 数组下标从0开始,如C或Java.负数索引假设数组末尾---也就是说,-1表示最后一个元素的数组索引,-2是数组中最后一个元素的下一个元素等等. Ruby的数组可以容纳对象,如字符串,整数,长整数,哈希,符号,甚至其他Array对象.Ruby数组没有在其他语言中数组一样严格.Ruby数组自动增长