2013-06-13 48 views

回答

4

注意的事實是,在紅寶石,MethodProc是兩回事。

對於Proc#arity,返回的數字是通過調用proc不會被忽略的參數數量。
對於您聲明的第一個proc,它只需要一個參數,因此它的參數爲1. 對於第二個proc,它只有一個參數是可選的,因此它根本不期待參數,所以它是0

對於Method#arity,返回的數字是該方法接受的參數個數。
你的方法實際上需要一個可變數量的參數,即0..1,因此arity預計會返回一個負數,這裏是-1,因爲有0個必需的參數,並且公式爲-n-1(n是所需參數的數量)。

請注意,Proc#arity的文檔具有誤導性,因爲它提到了與Method#arity相同的公式,但事實並非如此。

lambda表達式的情況下,也很有趣,因爲:

lambda {|x=1|}.arity  # => -1 

它就像一個Method

+0

實際上'lambda's是'proc's。所以...... –

+0

@JanDvorak令人困惑的是'proc'和'Proc'意味着不同的東西。 – sawa

+0

@sawa抱歉;我的意思是「實際上'lambda's是'Proc's。所以...」 –

相關問題