代码之家  ›  专栏  ›  技术社区  ›  John Feminella

使用proc.call和proc时是否存在ruby优先权问题。[]?

  •  3
  • John Feminella  · 技术社区  · 14 年前

    最近我和一个朋友讨论了Ruby的 Proc . 你可以打电话给 进程 以几种方式之一。一种方法是调用 Proc.call :

    p = Proc.new { |x| "hello, #{x}" }
    p.call "Bob"
    => "hello, Bob"
    

    另一种方法是使用支架, Proc.[] 以下内容:

    p ["Bob"]
    => "hello, Bob"
    

    这里是否存在任何潜在的优先权问题,或者这两个语句是否完全可以互换?如果没有,您能否提供一个将提供不同结果的上下文示例?

    1 回复  |  直到 13 年前
        1
  •  2
  •   Aidan Cully    14 年前

    这个 #call 技术允许操作员优先于潜在的模糊意图:

    p = Proc::new do |a1| Proc::new do |a2| "#{a1.inspect}:#{a2.inspect}" end end
    p.call([1,2,3]).call [1]
    => => "[1, 2, 3]:[1]"
    p.call [1,2,3][1]
    => #<Proc:0x7ffa08dc@(irb):1>
    p.call([1,2,3])[1]
    => "[1, 2, 3]:1"
    p[[1,2,3]][[1]]
    => "[1, 2, 3]:[1]"
    

    这个 [] 语法使参数与方法的句法关联更加健壮,但是您可以通过在参数周围加括号来实现相同的效果。 Proc#call .

    推荐文章