我浏览了这个code,发现作者使用[]传递params来阻止。我自己试了一下
my_proc = proc { |x| x + 1 }
a = 0
my_proc[a] # => 1
my_proc.call(a) # => 1
这两个电话有什么区别?这是一种语法糖吗?
答案 0 :(得分:1)
它们在功能上是相同的。你可以使用你喜欢的任何一种风格。
答案 1 :(得分:1)
两种方式完全相同,并且是彼此的别名。因此,两种变体都调用相同的方法,这种方法不是由任何特殊语法决定的。它基本上定义为:
class Proc
def call(*args)
#...
end
alias [] call
end
您可能有兴趣注意甚至有第三种方式:
my_proc.(a)
这实际上是语法糖(即Ruby语言语法的扩展)。接受#call
的所有对象都可以被称为#34;这样,Ruby确保调用call
方法。