2012-09-10 32 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

更新了問題,更具體的道歉。 –