3

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

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

4

2 回答 2

6

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

Something.instance_method(:initialize).parameters
# => [[:req, :a], [:req, :b]]
于 2013-08-23T16:09:09.667 回答
1

那是因为接受的参数Something.new都是可选的。您可以将任意数量的参数传递给 Something.new. Something.new将不使用任何给定的参数创建一个实例,并且给它的整个参数集都将传递给Something#initialize,并且在那里您已经定义了具有特定数量参数的方法。

要得到你想要的,你需要直接咨询Something#initialize

Something.instance_method(:initialize).parameters
# => [[:req, :a], [:req, :b]]
于 2013-08-23T15:18:13.390 回答