zuerrong ·¢±íÓÚ 2010-11-18 14:44

rubyɨä֮block

rubyµÄblockÆäʵ¾ÍÊÇÄäÃûº¯Êý£¨»òCÀïµÄº¯ÊýÖ¸Õ룩¡£
ÔÚrubyÀ·½·¨´óÁ¿Ê¹ÓÃblock×÷Ϊ²ÎÊý£¬¿´ÆðÀ´ºÜ¿á£¬Ð´ÆðÀ´Ò²ºÜ¸ßЧ¡£

ÀýÈ磬¶ÔÕâôһ¸öÊý×飺

x =

ÏëÒªÕÒ³öËùÓÐСÓÚ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 =

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

2gua ·¢±íÓÚ 2010-11-27 11:28

ÕâһϵÁеÄRubyÌûµÄ³ö´¦ÔÚÄĶùѽ£¿

zuerrong ·¢±íÓÚ 2010-11-29 09:22

ÕâһϵÁеÄRubyÌûµÄ³ö´¦ÔÚÄĶùѽ£¿
2gua ·¢±íÓÚ 2010-11-27 11:28 http://bbs.chinaunix.net/images/common/back.gif


    ÎÒ×Ô¼ºÐ´µÄŶ¡£¡£

ziyiu123 ·¢±íÓÚ 2011-02-22 18:54

¼¸¸öÎÊÌ⣺

1.block_given? Õâ¸öÊÇ´ÓÄÄÀïÀ´µÄ£¿ ÎÒÔõôri²»µ½£¿
2.each {|s| z << s if yield s}ÖеÄeach£¬ÊDz»ÊǾÍÊÇself.each,ÎÒÊÔÁËһϽá¹ûÒ»Ñù£¬µ«ÊDz»¸ÒÈ·¶¨£¬»¹Çëlz´Í½Ì¡£
3.Â¥Ö÷ÄÐÅ®£¿ :mrgreen:

gr33n ·¢±íÓÚ 2011-11-17 02:59

¸Ð¾õ²»´í£¬¿´ÆðÀ´ºÜ¿á¡£

Èûͼ±¦ ·¢±íÓÚ 2014-03-25 07:25

»Ø¸´ 4# ziyiu123


    ͬÎÊÕâ¸ö

rubyish ·¢±íÓÚ 2014-03-26 03:47

±¾Ìû×îºóÓÉ rubyish ÓÚ 2014-04-03 01:36 ±à¼­

:shock::shock:

rubyish ·¢±íÓÚ 2014-03-26 03:53

±¾Ìû×îºóÓÉ rubyish ÓÚ 2014-04-03 01:37 ±à¼­

Ì«¸ÐлÁË¡£

Èûͼ±¦ ·¢±íÓÚ 2014-03-26 06:44

»Ø¸´ 8# rubyish


    :wink: {:3_189:}

dorodaloo ·¢±íÓÚ 2015-12-29 11:48

¸öÈ˸оõ²»´í֮ɨä
Ò³: [1]
²é¿´ÍêÕû°æ±¾: rubyɨä֮block