|
2005-12-23
TAG:Ruby hello_world
初学Ruby给我留下印象最深的callback的实现,即Ruby的block。它给我的感觉是很新颖,很有想法,也很大胆。 以前我也曾接触过一些其他语言的callback的实现,但都没有真正理解其中的精髓。直到看了Ruby的block,我才突感茅塞顿开,好像积压在心头的一块大石一下子被拿开了一样。Ruby似乎就是为了block而生的(好像有些绝对了,只是为了表达一下喜悦的心情:P)。 下面就是一个Ruby的block的小例子: class SayHello def say_hello hello = ‘hi ’ yield hello end end SayHello.say_hello{|greeting| print greeting, ‘tracy’} 结果如下: hi tracy 它的执行过程是这样的,系统调用SayHello的say_hello方法,并带有一个block,即{}中的代码,以后简称“块”。块中的代码首先被记录下来,然后开始执行say_hello方法,先是将‘hi’赋值给变量hello,接着遇到yield关键字,这时之前被记录下来的块中的代码会将yield取代,而yield后面的变量hello赋给块里||所夹的变量,这时方法say_hello的代码就好像是下面这样: def say_hello hello = ‘hi ’ print ‘hi’,’tracy’ end 它所产生的结果会是hi tracy就不难理解了。 我觉得这种机制的新颖之处就在于它将一段代码作为了方法的参数,这样就大大增强了方法的灵活性,而如此灵活的设计并非一定是好事,它就像一把双刃剑,程序员需要理解它更深层次的意思,明白Ruby语言设计者的良苦用心,正确的使用,这样它必将发挥巨大的作用!否则,代码将会复杂难懂,破败不堪。
|