分享
为什么问答平台  ›  专栏  ›  技术社区  ›  Ebuall

红宝石传递法 - Ruby passing method

  •  1
  • Ebuall  · 技术社区  · 1 周前

    5.times(method(:puts))
    

    ArgumentError: wrong number of arguments (given 1, expected 0)
            from (irb):78:in `times'
    

    [0, 1, 2, 3, 4].forEach(console.log)
    

    java.util.stream.IntStream.range(0, 5).forEach(System.out::println);
    

    method(:puts).call(1)
    # and
    5.times { |i| puts i }
    
    1 回复  |  直到 1 周前
        1
  •  2
  •   Silvio Mayolo Akash Gupta    1 周前

    times 采用一个块参数,它与“常规”参数的区别在于使用了一个与号。您可以向它传递一个显式块

    5.times { |x| puts x }
    

    &

    5.times(&method(:puts))
    

    对块参数进行不同的处理可以让我们编写看起来和操作非常类似于内置语句的方法。例如,Ruby中的无限循环可以写成

    loop {
      # fun stuff happening in here
    }
    

    loop 是核心库中的方法,而不是内置关键字。我们本来可以写的 发挥我们自己的作用。 Enumerable