2012-09-10 35 views
3

不确定这是否有答案,但希望有人知道。我正在尝试的是在Ruby 1.8.7中获取一个Method的可选参数数量。 Method#arity将不起作用,因为它返回-n-1,其中n是方法所需参数的数量。我需要的是可选参数的数量?例如Ruby 1.8.7中一种方法的可选参数数量

def foo(a,b,c=4,d=3) 
    # ... 
end 

如何识别有2可选参数?请记住,这是的Ruby 1.8.7

UPDATE

道歉的问题是不明确的,我需要调用方法前要知道的可选参数数量。例如

method_def = self.instance_method(:foo) 
# check for number of args 
# call method if it meets some kind of criteria 

回答

1

我不认为你可以。事实上,我认为这是原因在Ruby 1.9中引入的一个{Proc, Method, UnboundMethod}#parameters

instance_method(:foo).parameters.count {|type,| type == :opt } 
# => 2 
+0

从我在网上阅读的内容来看,你可能是对的。我会再等一等,看看有没有人有解决方法。 –

+0

所以,我猜那个绿色的复选框意味着你已经放弃了;-) –

+0

邑,在这一个上有一个非常强烈的共识:)我将不得不猴子补丁...但是,哦,以及有时需要发生。 –

1

你可以定义你的方法,如:

def foo(a,b,*p) 
    number_of_arguments = p.size 

    c = p[0] 
    d = p[1]  
end 

进一步的信息可以在 “可选参数” 中找到here

+0

@the OP,这些通常被称为“图示参数”,这可能是谷歌上搜索有用。 –

+0

你也可以这样做:'c,d = p'。更短:) –

+0

更新了问题,更具体的道歉。 –