Ruby学习笔记(07)_块
来源:互联网 发布:支付宝能取消淘宝账号 编辑:程序博客网 时间:2024/06/06 03:46
块的概念
- 块就是在调用方法时, 能与参数一起传递的多个处理的集合。 之前在介绍 each 方法、 time 方法等与循环有关的部分时, 我们就已经接触过块。 接收块的方法会执行必要次数的块。 块的执行次数由方法本身决定, 因此不需事前指定, 甚至有可能一次都不执行。
1.块由大量的代码组成。
- 2.您需要给块取个名称。
- 3.块中的代码总是包含在大括号 {} 内。
- 4.块总是从与其具有相同名称的函数调用。这意味着如果您的块名称为 test,那么您要使用函数 test 来调用这个块。
- 5.您可以使用 yield 语句来调用块。
可以使用块来实现回调, 比Java的匿名内部类更简单. 还可以传递一组代码, 以及实现迭代器
语法:
block_name{ statement1 statement2 ..........}
对象. 方法名( 参数列表) do | 块变量 |
希望循环的处理
end
或者
对象. 方法名( 参数列表) { | 块变量 |
希望循环的处理
}
yield语句
实例:
#!/usr/bin/ruby# -*- coding: UTF-8 -*-def test puts "在 test 方法内" yield puts "你又回到了 test 方法内" yieldendtest {puts "你在块内"}
结果:
在 test 方法内
你在块内
你又回到了 test 方法内
你在块内
带叁实例:
#!/usr/bin/ruby# -*- coding: UTF-8 -*-def test yield 5 puts "在 test 方法内" yield 100endtest {|i| puts "你在块 #{i} 内"}
结果:
你在块 5 内
在 test 方法内
你在块 100 内
{"cat","dog","horse"}.each {|name| print name,", "}("a".."e").each {|char| print char}
在这里,yield 语句后跟着参数。您甚至可以传递多个参数。在块中,您可以在两个竖线之间放置一个变量来接受参数。因此,在上面的代码中,yield 5 语句向 test 块传递值 5 作为参数。
如果您想要传递多个参数,那么 yield 语句如下所示:
yield a, b
此时,块如下所示:
test {|a, b| statement}
块和方法
您已经看到块和方法之间是如何相互关联的。您通常使用 yield 语句从与其具有相同名称的方法调用块。因此,代码如下所示:
实例:
#!/usr/bin/rubydef test yieldendtest{ puts "Hello world"}
BEGIN 和 END 块
每个 Ruby 源文件可以声明当文件被加载时要运行的代码块(BEGIN 块),以及程序完成执行后要运行的代码块(END 块)。
#!/usr/bin/ruby# -*- coding: UTF-8 -*-BEGIN { # BEGIN 代码块 puts "BEGIN 代码块 1"} BEGIN { # BEGIN 代码块 puts "BEGIN 代码块 2"} END { # END 代码块 puts "END 代码块 1"}END { # END 代码块 puts "END 代码块 2"} # MAIN 代码块puts "MAIN 代码块"
结果:
BEGIN 代码块 1
BEGIN 代码块 2
MAIN 代码块
END 代码块 2
END 代码块 1
阅读全文
0 0
- Ruby学习笔记(07)_块
- Ruby学习笔记_单元测试
- Ruby学习笔记_对象过程
- Ruby学习笔记_异常处理rescue
- Ruby学习笔记(03)_变量
- Ruby学习笔记(04)_判断
- Ruby学习笔记(05)_循环
- Ruby学习笔记(08)_模块Module
- Ruby学习笔记(09)_数组
- Ruby学习笔记(12)_范围Range
- Ruby学习笔记(13)_迭代器
- Ruby学习笔记(14)_异常
- Ruby学习笔记(16)_面对对象
- Ruby学习笔记(18)_冒号用法
- Ruby学习笔记(19)_继承
- Ruby学习笔记(20)_符号Symbol
- Ruby学习笔记(21)_限制权限
- 学习笔记_常用内建模块
- Java 微信开发(四)生成带参数二维码及分享到朋友圈、好友、QQ
- linux pycharm安装(Python环境搭建)
- centos phpMyAdmin登陆不进去 有些浏览器报错
- audio术语缩写(不断更新中...)
- 错误:HttpServlet was not found on the Java
- Ruby学习笔记(07)_块
- DBCP与C3P0连接池
- 马云:阿里巴巴必须成为国家和世界创新的发动机
- jersey接收可变复杂参数使用Map接收
- 6大数据实战系列-sparkSql实战
- selenium购买商品流程-Assert断言
- 解密蓝牙mesh系列 | 第三篇
- python--操作清单文件脚本
- Linux、Mac下GBK与UTF8编码文件的批量转换脚本