定义方法参数的条件

时间:2016-01-06 16:05:29

标签: ruby methods

我的方法只有一个参数:

def my_method(number)

end

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

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

my_method(1)

3 个答案:

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

如果您不想使用ArgumentError

,可以定义custom exception课程

如果您正在构建类似框架的东西,那么,您可以利用元编程技术来拦截方法调用并应用一些验证。请参阅Executing code for every method call in a Ruby module。您可能需要提出某种DSL来表达这些验证 - 在Rails中验证DSL的典型示例是Active Record Validations

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

答案 1 :(得分:1)

您必须检查条件并将其提升到方法体内。没有你想要的内置选项。

答案 2 :(得分:1)

你可以这样做:

def my_method arg, dummy = (raise ArgumentError, "arg < 2" if arg < 2) 
  puts "arg=#{arg}"
end
my_method 3
  # arg=3
my_method 1
  # ArgumentError: arg < 2