美文网首页
Ruby 中的 & 与代码块

Ruby 中的 & 与代码块

作者: howmanyfish | 来源:发表于2019-01-01 11:32 被阅读23次

    摘要

    &操作符号的含义是,这是一个Proc对象,我想把它当成代码块使用。去掉&操作符,就能再次得到一个Proc对象。
    参考书籍 《Ruby元编程》(第二版)

    基础范例:

    def no_name_block_fuc
      yield
    end
    
    def name_block_fuc &test_block
      p test_block
      yield
    end
    
    name_block_fuc {1+1}
    #<Proc:0x007fc3d8121af8@(irb):47>
     => 2
    
    p = proc {2+2}                     => #<Proc:0x007fc3d7aa57b0@(irb):56>     
    no_name_block_fuc(&p)     => 4
    
    

    拓展:
    当&作用的对象非Proc时,会自动调用对象的#to_proc方法,把对象转化程一个Proc,再转化成一个代码块。
    比如Symbol中有如下代码:

    class Symbol
      def to_proc
        Proc.new { |x| x.send(self) }
      end
    end
    

    所以,经常看到如下类似代码:

    a = ['abc','cde']
    a.map(&:reverse)
    

    相关文章

      网友评论

          本文标题:Ruby 中的 & 与代码块

          本文链接:https://www.haomeiwen.com/subject/escnlqtx.html