像在標題 - 例如我有一個方法DrawMe(what)
,我想允許運行此方法時,what
參數等於這個值之一:{"house", "garden", "cat", "dog"}
- 如果不是,那麼此方法應該被停止並應打印錯誤。有任何想法嗎?指定方法參數的允許值
回答
class Draw
ALLOWED = %w[house garden cat dog]
def self.me(what)
raise ArgumentError, "Unknown drawable '#{what}'" unless ALLOWED.include?(what)
# Otherwise, carry on!
puts "I'm going to draw a #{what}!"
end
end
Draw.me('garden') #=> I'm going to draw a garden!
Draw.me('cat' ) #=> I'm going to draw a cat!
Draw.me('morals') #=> RuntimeError: Unknown drawable 'morals'
但是,請注意大部分時間你不應該確保開發人員通過正確類型的值到你的方法。如果由於誤用而爆炸,您的方法將會引發自己的錯誤;這是浪費你的時間和計算機的時間來嘗試檢查和捕獲這樣的錯誤。
編輯:如果你需要經常使用這個,你可以在任何地方猴補丁吧:
class Object
def ensure_in(enumerable)
unless enumerable.include?(self)
raise ArgumentError, "#{self} must be one of #{enumerable}"
end
end
end
def me(what)
what.ensure_in(ALLOWED)
# Go ahead
end
的感謝!我想過這樣的事情,但是有沒有其他的(更簡單/更短?)的方式在ruby/rails中做這樣的想法?編輯:謝謝你的建議,但我目前正在開發我的第一個紅寶石寶石,我真的很想在它的功能;) – mrmnmly 2012-04-25 21:27:06
比'提高'...',除非FOO.include?(酒吧)''?像什麼?這怎麼可能更短?你必須告訴它失敗,你必須告訴它什麼值是合法的,你必須告訴是否有什麼值得檢查。如果你喜歡,你可以省略好消息。 – Phrogz 2012-04-25 21:28:47
我只是認爲,也許這種功能(運行方法只與指定的值)是在ruby/rails的某些buit-in方法中實現的,我不知道 - 無論如何再次感謝;) – mrmnmly 2012-04-25 21:31:57
- 1. 指定boost :: program_options的允許值範圍
- 2. 允許類型成員的模板參數推導指針指向到方法
- 3. Print_r找到方法的允許值?
- 4. 不允許某些值的Mutator方法
- 5. Symfony2的路由:不允許的方法(允許:(方法})
- 6. 不允許參數?
- 7. RSpec的不允許待定方法
- 8. 在Joi中允許可選參數,而不指定它們
- 9. 不允許的參數
- 10. 允許的表單參數
- 11. 不允許的參數:songs_attributes
- 12. Python argparse:單值參數,但允許在命令行上指定多次
- 13. 強參數,不允許的參數
- 14. 訪問控制允許方法不允許刪除方法angularjs
- 15. 不指定參數的呼叫方法
- 16. 限制函數參數以允許特定值
- 17. 的Javascript:允許作爲一個參數進入公共方法
- 18. 爲什麼xunit不允許測試帶參數的方法?
- 19. 爲方法參數設置允許的變量類型
- 20. 方法是不允許的
- 21. 405:不允許的方法
- 22. 允許Java方法調用參數對象的子類的方法嗎?
- 23. 整數模板參數指定參數個數的類方法
- 24. 不能允許具有強參數的自定義參數
- 25. Aglio不允許將主體中的參數定義爲參數
- 26. Checkstyle匹配並允許法律註釋參數值
- 27. 調用模板方法只允許子類作爲參數
- 28. 爲什麼在匿名方法中不允許out參數?
- 29. 爲什麼字符串Remove()方法允許char作爲參數?
- 30. PL/SQL ORA-30625:方法調度爲NULL SELF參數不允許
考慮使用的符號,而不是字符串 – 2012-04-26 13:11:06