1

就像在标题中一样-例如,我有一个方法,并且我希望在参数等于以下值之一DrawMe(what)时允许运行此方法: -如果不是,则应停止此方法并应打印错误。有任何想法吗?what{"house", "garden", "cat", "dog"}

4

1 回答 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 回答