定义方法参数的条件

Gra*_*ick 5 ruby methods

我有一个方法只采用一个参数:

def my_method(number)

end
Run Code Online (Sandbox Code Playgroud)

如果使用number < 2?调用方法,如何引发错误?通常,我如何定义方法参数的条件?

例如,我想在调用时出错:

my_method(1)
Run Code Online (Sandbox Code Playgroud)

Wan*_*ker 6

您可以在函数的开头添加guard,如果参数无效,则引发异常.例如:

def my_method(number)
    fail ArgumentError, "Input should be greater than or equal to 2" if number < 2

    # rest of code follows
    # ...
end

# Sample run
begin
  my_method(1)
rescue => e
    puts e.message
end
#=> Input should be greater than or equal to 2
Run Code Online (Sandbox Code Playgroud)

如果您不想使用,可以定义自定义异常ArgumentError


如果您正在构建类似框架的东西,那么,您可以利用元编程技术来拦截方法调用并应用一些验证.请参阅Ruby模块中每个方法调用的执行代码.您可能需要提出某种DSL来表达这些验证 - 验证DSL的典型示例是Rails中的Active Record Validations.

总之,对于日常用例,简单raise(fail)rescue就足够了.只有在构建通用框架时才需要元编程和基于DSL的验证.