我的方法只有一个参数:
def my_method(number)
end
如果使用number < 2
调用方法,如何引发错误?
通常,我如何定义方法参数的条件?
例如,我想在调用时出错:
my_method(1)
答案 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
如果您正在构建类似框架的东西,那么,您可以利用元编程技术来拦截方法调用并应用一些验证。请参阅Executing code for every method call in a Ruby module。您可能需要提出某种DSL来表达这些验证 - 在Rails中验证DSL的典型示例是Active Record Validations。
总之,对于日常用例,简单的raise
(or 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