Ҳ˵˵ruby inject
Ҳ˵˵ruby inject
Æäʵ£¬Ã»ÓÐʲô̫¶à˵µÄ£¬IEÓеÄÏÈÁ´½Ó¹ýÀ´
http://biyeah.iteye.com/blog/1286449
http://www.iteye.com/topic/56291
ÏÂÃæµÄ×ܽáµÄͦºÃ£¬
ÍêÁËÀ´»Ø¹ËÒ»ÏÂinject·½·¨Á½ÖÖÓ÷¨£º
Ruby´úÂë1.enum.inject(init_value) {|memo,obj|block}
2.enum.inject{ |memo,obj| block }µÚÒ»ÖÖ£¬memoÒÔinit_valueΪ³õʼֵ
µÚ¶þÖÖ£¬memoÒÔenumÀïµÄµÚÒ»¸öÔªËØÎª³õʼֵ¡£
È»ºó£¬inject¿ÉÒÔÕâôд
Ruby´úÂë1.(1..4).inject(&:+)ºÒåÊÇ
Ruby´úÂë1.{|memo, a| memo.send(sym, a)}ºÍmapÄǸöÓ÷¨Ò»Ñù
Ruby´úÂë1.def tag_names
2. @tag_names || tags.map(&:name).join(' ')
3. end
ºÒåÊÇ£º
Ruby´úÂë1.class Symbol
2.def to_proc
3. Proc.new do |obj, *args|
4. obj.send self, *args
5. end
6.end
7.endÒ²¿ÉÒÔ´øindexµÄÖ´ÐÐ
Ruby´úÂë1.%w(a b c).each_with_index.inject([]){|result, (value,index)| result << value + index.to_s} ËùÒÔ£¬Ò»×éÖµµÄʱºò
Ruby´úÂë1.User.all.inject(0){|sum,user|sum += user.followers.count}»òÕß
Ruby´úÂë1.User.all.map(&:count).inject(&:+)Æäʵ
Ruby´úÂë1.User.sum(:filed)------------------------------------------»ªÀöɶ·Ö¸î----------------------------------------------------------------
ͦºÃµÄ¶«Î÷ÊÕµ½Õâ°É
¾«Ï¸duck typing¿ØÖÆ
duck typingµÄ¾«Éñ¾ÍÊÇÐÐΪ¾ö¶¨ÀàÐÍ£¬¶ø²»ÊÇÏà·´
Ruby´úÂë1.a = []
2.#²»ÓÃ
3.if a.kind_of? Array then a << 1
4.if a.instance_of? Array then a << 1
5.#¶øÓÃ
6.if a.respond_to? :<< then a << 1 »ñÈ¡metaclass
ÕâÒ²±È½Ï³£¼ûÁË£¬¸÷ÖÖ¶¯Ì¬¼¿Á©µÄ¿ªÊ¼
Ruby´úÂë1.sing = class << self; self; end ÊÇ×ܽáµÃºÃ¡£ ͦºÃ:em03: .inject£¬ÎÒ»¹ÊÇÂùϲ»¶¡£ ºÜÓÐÓõÄŶ Õâ×ܽáµÄͦºÃ£¬ Âùϲ»¶Å¶¡£
Ò³:
[1]