初学Ruby
给我留下印象最深的callback
的实现,即Ruby
的block
。它给我的感觉是很新颖,很有想法,也很大胆。 以前我也曾接触过一些其他语言的callback的实现,但都没有真正理解其中的精髓。直到看了Ruby的block,我才突感茅塞顿开,好像积压在心头的一块大石一下子被拿开了一样。Ruby似乎就是为了block而生的(好像有些绝对了,只是为了表达一下喜悦的心情:P)。Wish-Space#wqlLnu
{
下面就是一个Ruby的block的小例子:Wish-SpacePfrF:\9uEq
class SayHelloWish-Space/iNA,RW
def say_hello
"H^?mR1@1~0 hello = ‘hi ’Wish-Space.X3dm"x-w M8L _q
yield hello
a3s&NO&`0 end
7n%Xms)xB
w2XL0 end
\o'c2n+p8r4_0 SayHello.say_hello{|greeting| print greeting, ‘tracy’}Wish-Spacea2k0J-f/F|
结果如下:Wish-Space
TTk!H [pP4z^#t
hi tracyWish-SpaceL0`y9d6a%AX"Q
它的执行过程是这样的,系统调用SayHello的say_hello方法,并带有一个block,即{}中的代码,以后简称“块”。块中的代码首先被记录下来,然后开始执行say_hello方法,先是将‘hi’赋值给变量hello,接着遇到yield关键字,这时之前被记录下来的块中的代码会将yield取代,而yield后面的变量hello赋给块里||所夹的变量,这时方法say_hello的代码就好像是下面这样:
C7nX)}0[0 def say_hello
Tz'iyON[&I0 hello = ‘hi ’
-OFt8xG0 print ‘hi’,’tracy’
t8fkD s&@|7Y;L0 end
XBQ-NnPf0 它所产生的结果会是hi tracy就不难理解了。Wish-SpaceRM+B,H/tfE
我觉得这种机制的新颖之处就在于它将一段代码作为了方法的参数,这样就大大增强了方法的灵活性,而如此灵活的设计并非一定是好事,它就像一把双刃剑,程序员需要理解它更深层次的意思,明白Ruby语言设计者的良苦用心,正确的使用,这样它必将发挥巨大的作用!否则,代码将会复杂难懂,破败不堪。Wish-Spacezx5@[B%`|