用Ruby开发总是令人赏心悦目的,它语法中无处不存在灵光一闪,让人很有一种乐趣。
迭代器的block,这是挺有意思的地方。
1 anArray.each do |ele|
2 p ele
3 end
2 p ele
3 end
这个不用介绍了吧,这是基础,这样的基础能衍生出下面的东西出来:
1 def method1(arg, &block)
2 arg.each do |a|
3 yield(a) if block
4 end
5 end
6
7 method1 [1,2,3] do |b|
8 p b
9 end
2 arg.each do |a|
3 yield(a) if block
4 end
5 end
6
7 method1 [1,2,3] do |b|
8 p b
9 end
上述玩意有什么效果?嗯,看官自己去试吧,讲解很费力。
在《The Ruby Way》介绍了另外的一种方法来调用Block:
1 def method2(x, &y)
2 instance_eval &y if y
3 p x
4 end
5
6 method2(2) { p 1 }
2 instance_eval &y if y
3 p x
4 end
5
6 method2(2) { p 1 }
有人可能会觉得这玩意有什么用呢?主要是最近又在翻Ruby Agile Web Development,看到那个redirect的教程,可以传错误信息的那个方法。记得早前有几个朋友问过,Ruby的传参数如何诡异。。。。关于这个方法,调试了好多次,但传参数的模式总不合理。现在好了吧,用block,在跳转之前执行block的命令,你要干啥就干啥。这比之Javascript将一个function作为参数调用,又高明了许多。