Ruby中的迭代器实现。
程序员文章站
2022-05-03 18:05:48
...
记得刚接触ruby的时候被可爱的each深深吸引,也有让人看不懂的
深入了解以后终于发现了其中的秘密,今天有空整理出来。
其实这些都是ruby中的“块”所实现的。
块可以看成是由代码组合成的变量(是不是有点像函数?),我们可以在调用方法的传递一个块做参数,而方法内调用这个块就实现了上边的两种应用。
定义块可以使用
或者
然后在方法中使用yield调用就可以啦。
来个小例子,先来看看定义的方法
够简单吧,只有已经yield,有了他我们就可以传递一个块做参数给show方法,show方法就是调用执行我们传递的块。
运行来看看。没有意外屏幕就应该显示 "我们定义的块"
如果看不明白可以这样看看
基本的块的应用就是这么简单,来点深的,加上点参数。
还是来看看方法
多了一个参数而已,没难度。下面传递块。
太简单了。还可以传递多个参数。不写了,和其他的方法差不多。参数不足的时候就是nil,参数多了就是数组。
灵活的使用块可以很方便的让我们编写代码。下边这个是由一本书上改编而来的,书名就不说了避免广告嫌疑。
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
上一篇: 南尼寺旅游攻略【日喀则今日朗萨姑娘】
下一篇: 移动端zepto+touch插件