我想在构造函数中检索参数的名称。给出以下代码:
class Something
def self.do_something(a, b); end
def initialize(a, b); end
end
我明白了:
Something.method(:do_something).parameters
# => [[:req, :a], [:req, :b]]
Something.method(:new).parameters
# => [[:rest]]
为什么Method#parameters
在[[:rest]]
的情况下返回new
,如何获取构造函数参数?
答案 0 :(得分:6)
如果您询问Something::new
的参数,您将获得Something::new
的参数。如果您想知道Something#initialize
的参数,则需要提出Something#initialize
:
Something.instance_method(:initialize).parameters
# => [[:req, :a], [:req, :b]]
答案 1 :(得分:1)
这是因为Something.new
所采用的参数都是可选的。您可以将任意数量的参数传递给Something.new
。 Something.new
将使用给定的任何参数创建一个实例,并且赋予它的整个参数集将传递给Something#initialize
,并且您已经使用特定数量的参数定义了该方法。
要获得您想要的内容,您需要直接咨询Something#initialize
:
Something.instance_method(:initialize).parameters
# => [[:req, :a], [:req, :b]]