浏览 1618 次
锁定老帖子 主题:Ruby中的迭代器实现。
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2008-10-09
show("Ruby") |value| do puts "value is " + value end 深入了解以后终于发现了其中的秘密,今天有空整理出来。 其实这些都是ruby中的“块”所实现的。 块可以看成是由代码组合成的变量(是不是有点像函数?),我们可以在调用方法的传递一个块做参数,而方法内调用这个块就实现了上边的两种应用。 定义块可以使用 { .... } 或者 do .... end 然后在方法中使用yield调用就可以啦。 来个小例子,先来看看定义的方法 def show yield end 够简单吧,只有已经yield,有了他我们就可以传递一个块做参数给show方法,show方法就是调用执行我们传递的块。 show do puts "我们定义的块" end 运行来看看。没有意外屏幕就应该显示 "我们定义的块" 如果看不明白可以这样看看 show (do puts "我们定义的块" end) #就是个参数,不过参数是个使用块语法定义的块。不过要注意可不能这么写,不能执行的~呵呵!真的想写一行就去掉括号吧。 show do puts "我们定义的块" end 基本的块的应用就是这么简单,来点深的,加上点参数。 还是来看看方法 def show name yield name end 多了一个参数而已,没难度。下面传递块。 show "SuperXieLei" do |value| puts "我的名字是:" + value end 太简单了。还可以传递多个参数。不写了,和其他的方法差不多。参数不足的时候就是nil,参数多了就是数组。 灵活的使用块可以很方便的让我们编写代码。下边这个是由一本书上改编而来的,书名就不说了避免广告嫌疑。 class Apple def initialize name,color,weight,&action @name = name @color = color @weight = weight @action = action end def show @action ? ( @action.call :name,@name) : (yield :name,@name) @action ? ( @action.call :color,@color) : (yield :color,@color) @action ? ( @action.call :weight,@weight) : (yield :weight,@weight) end end apple = Apple.new "红苹果","红色","0.4" do |name,value| puts "使用原始块执行--" + name.to_s + "变量值是:" + value.to_s end apple.show do |name,value| puts "使用新定义块执行--" + name.to_s + "变量值是:" + value.to_s end apple1 = Apple.new "绿苹果","绿色","0.8" apple1.show do |name,value| puts "使用新定义块执行--" + name.to_s + "变量值是:" + value.to_s end 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |