- ÂÛ̳»ÕÕÂ:
- 0
|
rubyµÄblockÆäʵ¾ÍÊÇÄäÃûº¯Êý£¨»òCÀïµÄº¯ÊýÖ¸Õ룩¡£
ÔÚrubyÀ·½·¨´óÁ¿Ê¹ÓÃblock×÷Ϊ²ÎÊý£¬¿´ÆðÀ´ºÜ¿á£¬Ð´ÆðÀ´Ò²ºÜ¸ßЧ¡£
ÀýÈ磬¶ÔÕâôһ¸öÊý×飺
x = [3,1,4,2,9,0]
ÏëÒªÕÒ³öËùÓÐСÓÚ3µÄ³ÉÔ±£¬ÄÇô´ó¼Òͨ³£»áÏëµ½Êý×éµÄselect·½·¨£º
z = x.select {|s| s <3}
select·½·¨½ÓÊÜÒ»¸öblockΪ²ÎÊý¡£
ÄÇôselect¾ßÌåÊÇÈçºÎÖ´ÐÐÕâ¸öblockµÄÄØ£¿ÆäÊµÃØÃܾÍÔÚÓÚrubyµÄyieldÕâ¸ö·½·¨£¬ËüÓÃÀ´Ö´ÐÐblock¡£
ÀýÈ磬ÔÛÃÇ×Ô¼º¿ÉÒÔдһ¸ömyfind·½·¨À´´úÌæselect:- class Array
- def myfind
- if block_given?
- z = []
- each {|s| z << s if yield s}
- z
- else
- raise "no block given"
- end
- end
- end
¸´ÖÆ´úÂë ÎÒÃÇÊ×ÏÈ´ò¿ªArrayÀࣨ¼ÇסrubyµÄËùÓÐÀà¶¼ÊÇ¿ª·ÅµÄ£©£¬È»ºó¶¨Òåmyfindº¯Êý£¨def myfind£©¡£
Èç¹ûÓÐblock²ÎÊý´«¸ømyfind£¬ÄÇôִÐÐeach {|s| z << s if yield s}Õâ¾ä£¬±íʾ±éÀúselfÊý×飬°Ñÿһ¸öÔªËØ×÷Ϊ²ÎÊý´«¸øyield¡£
È»ºóyield¾ÍÖ´ÐÐÓû§´«ÈëµÄblock£¬²¢ÅжÏÖ´Ðнá¹û¡£Èç¹ûÎªÕæ¾Í°ÑÔªËØÑ¹ÈëzÊý×飬×îºó·µ»ØzÊý×é¡£
Èç¹ûûÓÐblock´«¸ømyfind·½·¨£¬»áraiseÒ»¸öÔËÐÐʱ´íÎó£¬ËµÃ÷"no block given"¡£
OK ÈÃÎÒÃÇ¿´ÍêÕû½Å±¾£º- x = [3,1,4,2,9,0]
- class Array
- def myfind
- if block_given?
- z = []
- each {|s| z << s if yield s}
- z
- else
- raise "no block given"
- end
- end
- end
- z = x.myfind {|s| s < 3}
- p z
¸´ÖÆ´úÂë ÔËÐнá¹ûΪ£º
$ ruby block.rb
[1, 2, 0] |
|