方法名(*)是什么意思?

3
在rails的代码中,我遇到了以下方法定义def initialize(*) 我知道def foo(*a)的含义,但无法理解在*后省略标识符名称的重要性。如何访问传递给此方法的任何参数?

对于可变数量的参数,例如Python,请返回已翻译的文本。 - Grijesh Chauhan
@GrijeshChauhan 我理解可变参数的概念,但是在 def foo(*) 中如何访问这些可变参数呢? - saihgala
抱歉:(我的评论只是猜测。我从未接触过Ruby。但是好问题。 - Grijesh Chauhan
1
@JörgWMittag 谢谢,我没有想到"裸星号"这个术语,所以无法在网上搜索。 - saihgala
lolz....... naked asterisk - Gopal S Rathore
1个回答

3

以下是我的猜测。

它之所以能够工作,是由于第二行的原因:

def initialize(*)
  super
  ...
end

所以这个方法接收任意数量的参数并将它们全部传递给super(就像您知道的那样,没有参数的super表示从原始方法中获取所有参数)。
在这种情况下,参数名称不是必需的。

2
这是一种安全保护措施,用于保护您的类/模块层次结构中的方法签名更改:“做任何super所做的事情,我不关心参数。” - Koraktor

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接