获取构造函数的参数名称

时间:2013-08-23 14:25:17

标签: ruby reflection

我想在构造函数中检索参数的名称。给出以下代码:

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,如何获取构造函数参数?

2 个答案:

答案 0 :(得分:6)

如果您询问Something::new的参数,您将获得Something::new的参数。如果您想知道Something#initialize的参数,则需要提出Something#initialize

Something.instance_method(:initialize).parameters
# => [[:req, :a], [:req, :b]]

答案 1 :(得分:1)

这是因为Something.new所采用的参数都是可选的。您可以将任意数量的参数传递给Something.newSomething.new将使用给定的任何参数创建一个实例,并且赋予它的整个参数集将传递给Something#initialize,并且您已经使用特定数量的参数定义了该方法。

要获得您想要的内容,您需要直接咨询Something#initialize

Something.instance_method(:initialize).parameters
# => [[:req, :a], [:req, :b]]