2011-08-21 72 views
0

有沒有辦法在方法中獲取參數名稱列表?如何獲取方法定義中的名稱或參數?

例如,假設我有以下方法定義:

def speak(name, age, address) 
    # some code 
end 

我怎樣才能得到的nameageaddress一個數組?

+0

這是[有沒有辦法在ruby中返回方法參數名稱](http://StackOverflow.Com/q/2452077/#2452322),[在Ruby中反射方法參數](http:// StackOverflow的.com/q/3456827 /#3460072) ,[任何ruby庫檢查什麼是某些方法的參數?](http://StackOverflow.Com/q/6420695/#6425175)和[Ruby:如何檢查實例方法的參數而不創建新實例?](http://StackOverflow.Com/q/6717912/#6717939)。 –

回答

2

您可以直接使用這些值。

def speak(name, age, address) 
    puts "Hello #{name}!" 
end 

要訪問你可以使用local_variables的名字,但我真的不推薦它。

def speak(name, age, address) 
    p local_variables # => [:name, :age, :address] 
end 

但最有可能你會想使用哈希:

def speak(hash) 
    # use the keys/values of hash 
end 

現在你可以使用

speak({:name => "foo", :age => 42, :address => "123"}) 
# or 
speak(:name => "foo", :age => 42, :address => "123") 
+0

我正在談論參數的變量名稱。我知道這可能聽起來有點愚蠢,因爲我已經應該知道爭論的變數了。 – denniss

+0

請參閱我編輯的答案。 – jtbandes

+0

那麼,爲什麼你不能只使用哈希作爲你的方法的參數?然後您將能夠收集傳遞的名稱 - 值對。爲什麼不? –

0

找到了答案!

def speak (name, age, address) 
puts local_variables 
end 
1

可以使用local_variables它,但有一個更好的辦法:

def speak(name, age, address) 
    p self.method(__method__).parameters #=> [[:req, :name], 
              [:req, :age], 
              [:req, :address]] 
end 

當您使用local_variables你應該在方法的開始使用它:

def speak(name, age, address) 
    foo = 1 
    p local_variables #=> [:name, :age, :address, :foo] 
end 
相關問題