用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作为参数调用,又高明了许多。