获取构造函数参数的名称

5

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

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]] 

为什么在使用new时,Method#parameters会返回[[:rest]],如何获取构造函数参数?
2个回答

7
如果您询问Something::new的参数,您将获得Something::new的参数。如果您想知道Something#initialize的参数,则需要询问Something#initialize
Something.instance_method(:initialize).parameters
# => [[:req, :a], [:req, :b]]

1
那是因为 Something.new 接受的参数都是可选的。你可以传递任意数量的参数给 Something.newSomething.new 将创建一个实例,不使用给定的任何参数,并将所有给定的参数集传递给 Something#initialize,在那里您定义了具有特定数量参数的方法。
要获得所需内容,您需要直接查阅 Something#initialize
Something.instance_method(:initialize).parameters
# => [[:req, :a], [:req, :b]]

不错的回答... :) 我之前没想到.. 所以我删掉了我的回答.. :( 但你应该得到你的奖励..即 +1 .. - Arup Rakshit

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