红宝石,两种方式如何通过params proc

时间:2015-04-25 07:36:22

标签: ruby

我浏览了这个code,发现作者使用[]传递params来阻止。我自己试了一下

my_proc = proc { |x| x + 1 }
a = 0
my_proc[a]        # => 1
my_proc.call(a)   # => 1

这两个电话有什么区别?这是一种语法糖吗?

2 个答案:

答案 0 :(得分:1)

它们在功能上是相同的。你可以使用你喜欢的任何一种风格。

答案 1 :(得分:1)

两种方式完全相同,并且是彼此的别名。因此,两种变体都调用相同的方法,这种方法不是由任何特殊语法决定的。它基本上定义为:

class Proc
  def call(*args)
    #...
  end

  alias [] call
end

您可能有兴趣注意甚至有第三种方式:

my_proc.(a)

这实际上是语法糖(即Ruby语言语法的扩展)。接受#call的所有对象都可以被称为#34;这样,Ruby确保调用call方法。