3
與proc
和method
,我得到以下不同的結果。這是爲什麼?爲什麼我會在proc和method之間得到不同的結果?
proc {|x|}.arity # => 1
proc {|x=1|}.arity # => 0
def foo(x=1);end;method(:foo).arity # => -1
與proc
和method
,我得到以下不同的結果。這是爲什麼?爲什麼我會在proc和method之間得到不同的結果?
proc {|x|}.arity # => 1
proc {|x=1|}.arity # => 0
def foo(x=1);end;method(:foo).arity # => -1
注意的事實是,在紅寶石,Method
和Proc
是兩回事。
對於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
。
實際上'lambda's是'proc's。所以...... –
@JanDvorak令人困惑的是'proc'和'Proc'意味着不同的東西。 – sawa
@sawa抱歉;我的意思是「實際上'lambda's是'Proc's。所以...」 –