就像在标题中一样-例如,我有一个方法,并且我希望在参数等于以下值之一DrawMe(what)
时允许运行此方法: -如果不是,则应停止此方法并应打印错误。有任何想法吗?what
{"house", "garden", "cat", "dog"}
问问题
257 次
1 回答
5
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
于 2012-04-25T21:24:30.563 回答