有沒有辦法檢查Ruby中是否存在特定的方法簽名?
例如我想打電話
thing.make(env: @@__ENV__, apiKey: "myKey")
如果我做這個檢查
if thing.respond_to? 'make'
我可以以錯誤告終
ArgumentError: unknown keyword: :apiKey
有沒有辦法檢查是否有特定的make(env:,apiKey:)方法,而不僅僅是make任何引數
uj5u.com熱心網友回復:
最簡單的方法是嘗試并挽救 ArgumentError。
begin
thing.make(env: @@__ENV__, apiKey: "myKey")
rescue ArgumentError => e
...guess not...
end
您還可以內省Method 物件的引數。這將回傳一個陣列陣列,如[[:key, :env], [:key, :apiKey]] 。您正在尋找:key它是否是可選的,:keyreq如果它是必需的。
params = thing.method(:make).parameters
p [:env,:apiKey].all? { |arg|
params.include?([:key,arg]) || params.include?([:keyreq, arg])
}
如果您必須將此作為應用程式代碼的一部分,您可能需要重新考慮您的設計。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/331837.html
上一篇:如何使用Chef配方通過讀取Shell腳本來設定環境變數?
下一篇:覆寫從父類繼承的依賴gem類
