指定方法参数的允许值

时间:2012-04-25 21:20:54

标签: ruby-on-rails ruby

与标题一样 - 例如,我有一个方法DrawMe(what),当what参数等于其中一个值时,我想允许运行此方法:{"house", "garden", "cat", "dog"} - 如果不应该停止此方法并应打印错误。有什么想法吗?

1 个答案:

答案 0 :(得分: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'

但是,请注意大部分时间您不应该确保开发人员将正确类型的值传递给您的方法。如果因滥用而爆炸,您的方法将引发自己的错误;这是浪费你的时间和计算机的时间来尝试检查和捕获这样的错误。

编辑:如果您需要经常使用此功能,您可以在任何地方对其进行monkeypatch:

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