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
ÕâһϵÁеÄRubyÌûµÄ³ö´¦ÔÚÄĶùѽ£¿ ÕâһϵÁеÄRubyÌûµÄ³ö´¦ÔÚÄĶùѽ£¿
2gua ·¢±íÓÚ 2010-11-27 11:28 http://bbs.chinaunix.net/images/common/back.gif
ÎÒ×Ô¼ºÐ´µÄŶ¡£¡£ ¼¸¸öÎÊÌ⣺
1.block_given? Õâ¸öÊÇ´ÓÄÄÀïÀ´µÄ£¿ ÎÒÔõôri²»µ½£¿
2.each {|s| z << s if yield s}ÖеÄeach£¬ÊDz»ÊǾÍÊÇself.each,ÎÒÊÔÁËһϽá¹ûÒ»Ñù£¬µ«ÊDz»¸ÒÈ·¶¨£¬»¹Çëlz´Í½Ì¡£
3.Â¥Ö÷ÄÐÅ®£¿ :mrgreen: ¸Ð¾õ²»´í£¬¿´ÆðÀ´ºÜ¿á¡£ »Ø¸´ 4# ziyiu123
ͬÎÊÕâ¸ö ±¾Ìû×îºóÓÉ rubyish ÓÚ 2014-04-03 01:36 ±à¼
:shock::shock: ±¾Ìû×îºóÓÉ rubyish ÓÚ 2014-04-03 01:37 ±à¼
Ì«¸ÐлÁË¡£ »Ø¸´ 8# rubyish
:wink: {:3_189:} ¸öÈ˸оõ²»´í֮ɨä
Ò³:
[1]