像在标题 - 例如我有一个方法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