使用irb
,我們可以通過執行以下列出特定對象的方法:有沒有辦法知道一個方法需要多少個參數?
"Name".methods
但是,如果我想知道有多少參數都需要一個特定的方法,我怎麼能做到這一點?我的意思是有什麼辦法(通過在irb上打一些命令),我們可以獲得特定方法的參數數量(而不是參考文檔)?
.methods
只返回方法名稱,不返回方法參數列表。
使用irb
,我們可以通過執行以下列出特定對象的方法:有沒有辦法知道一個方法需要多少個參數?
"Name".methods
但是,如果我想知道有多少參數都需要一個特定的方法,我怎麼能做到這一點?我的意思是有什麼辦法(通過在irb上打一些命令),我們可以獲得特定方法的參數數量(而不是參考文檔)?
.methods
只返回方法名稱,不返回方法參數列表。
您可以使用該方法Method#arity
:
"string".method(:strip).arity
# => 0
從Ruby文檔:
返回由方法所接受的參數個數的指示。 爲採用固定數量的參數的方法返回一個非負整數。對於帶有可變參數個數的Ruby方法, 返回-n-1,其中n是所需參數的個數。對於用C編寫的方法 ,如果調用採用可變數量的參數 ,則返回-1。
因此,舉例來說:
# Variable number of arguments, one is required
def foo(a, *b); end
method(:foo).arity
# => -2
# Variable number of arguments, none required
def bar(*a); end
method(:bar).arity
# => -1
# Accepts no argument, implemented in C
"0".method(:to_f).arity
# => 0
# Variable number of arguments (0 or 1), implemented in C
"0".method(:to_i).arity
# => -1
更新我剛剛發現的Method#parameters
的exitence,它可能是非常有用的:
def foo(a, *b); end
method(:foo).parameters
# => [[:req, :a], [:rest, :b]]
您可以使用arity
返回方法接受的參數個數的指示。返回具有固定數量參數的方法的非負整數。對於採用可變數量參數的Ruby方法,返回-n-1,其中n是所需參數的數量。對於用C編寫的方法,如果調用需要可變數量的參數,則返回-1。
來自實例ruby-doc
class C
def one; end
def two(a); end
def three(*a); end
def four(a, b); end
def five(a, b, *c); end
def six(a, b, *c, &d); end
end
c = C.new
c.method(:one).arity #=> 0
c.method(:two).arity #=> 1
c.method(:three).arity #=> -1
c.method(:four).arity #=> 2
c.method(:five).arity #=> -3
c.method(:six).arity #=> -3
謝謝你!!!!! – TDHM