代码之家  ›  专栏  ›  技术社区  ›  Leron

用&:语法om Ruby调用自定义方法

  •  0
  • Leron  · 技术社区  · 7 年前

    所以基本上我在看这个简单的例子:

    %w[A B C].map(&:downcase)
    

    并且对 &: 语法。在读了一些文章之后,我想我明白了(或者至少我是这么认为的),所以我决定为自己实现一些类似的东西 Integer 这样地:

    class Integer
      def my_multiplier
        puts "66"
      end
    end
    

    &: 因为我可以这么做:

    3.times(&:my_multiplier)

    66 .

    我的问题是如何重构我的方法,以便实际使用 3.times..

    2 回复  |  直到 7 年前
        1
  •  3
  •   Marcin Kołodziej    7 年前

    首先,语法是 &object ,不是 &: . &对象 .to_proc 在物体上。

    现在,假设你想让你的乘法器简单地把你的整数乘以66,你可以这样写:

    class Integer
      def my_multiplier
        puts 66 * self
      end
    end
    

    2.5.1 :006 > 3.times(&:my_multiplier)
    0
    66
    132
    

    这相当于打电话

    3.times { |i| i.my_multiplier }
    

    您还可以定义 my_multiplier 作为一个进程或lambda,

    2.5.1 :001 > p = ->(i) { puts i * 66 }
     => #<Proc:0x00005582b3ae5638@(irb):1 (lambda)> 
    2.5.1 :002 > 3.times(&p)
    0
    66
    132
    
        2
  •  1
  •   Sergio Tulentsev    7 年前

    目前还不清楚您使用该方法的目的是什么,但当前的整数将作为 self . 所以你可以这样做:

    class Integer
      def double 
        self * 2
      end 
    
    end
    
    3.times.map(&:double) # => [0, 2, 4]
    
    推荐文章