Ruby 事务Blocks
2013-09-30 09:28
281 查看
block可以用来定义必须运行在事务控制环境下的代码。例如,你经常需要打开一个文件,对其内容做些处理,然后确保在处理结束后关闭文件。尽管可以用传统方式来实现,但也存在“应该由文件负责自身的关闭”这样的观点。Ruby的File类支持这项技术。
如果File.open有个关联的block,那么该block将被调用,且参数是该文件对象,当block执行结束时文件会被关闭。这意味着File.open有两种不同的行为:当和block一起调用时,它会执行该block并关闭文件;当单独调用时,它会返回文件对象。
使得上述行为成为可能的是Kernel.block_given?方法,当某方法和block关联在一起调用时,Kernel.block_given?将返回true。下面是类似于标准File.open的方法(忽略了错误处理)。
classFile defFile.my_open(*args) result = file =File.new(*args) if block_given?# 判断是否带有block # result = yield file # 如果有block,再次调用 # file.close end return result end end File.open("testFile", "r"){|file| # {}中的操作在yield语句处被调用 # # 关于file的操作 }
相关文章推荐
- Ruby Blocks & Closures
- Containers, Blocks, and Iterators(Chapter 4 of Programming Ruby)
- 浅析 ruby on rails 中的事务嵌套 源码分析
- Ruby: 学习日志3: Containers, Blocks, Iterators
- ruby 学习笔记(六) Blocks
- 理解Ruby的4种闭包:blocks, Procs, lambdas 和 Methods
- 关于ruby on rails 的事务回调不触发,使用update_column
- 理解Ruby的4种闭包:blocks, Procs, lambdas 和 Methods。
- 【转】理解Ruby的4种闭包:blocks, Procs, lambdas 和 Methods
- ruby Blocks Can Be Closures(摘自programming ruby)
- [翻译]理解Ruby中的blocks,Procs和lambda
- [翻译]Understanding Ruby Blocks, Procs and Lambdas
- ruby中的blocks和iterators
- 理解Ruby的4种闭包:blocks, Procs, lambdas 和 Methods。 | Ruby迷
- Ruby on Rails自动事务过滤器及相应的错误处理
- 理解Ruby的4种闭包:blocks, Procs, lambdas 和 Methods
- Ruby的4种闭包:blocks, Procs, lambdas 和 Methods。
- Ruby创始人谈Ruby的blocks和closure结构
- Netbeans 6.0发布,支持Ruby、移动开发和集成的剖析器
- Code::Blocks 编译参数的相关设置