当前位置:  开发笔记 > 后端 > 正文

定义方法参数的条件

如何解决《定义方法参数的条件》经验,为你挑选了1个好方法。

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

def my_method(number)

end

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

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

my_method(1)

Wand Maker.. 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


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

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



1> Wand Maker..:

您可以在函数的开头添加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


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

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

推荐阅读
郑小蒜9299_941611_G
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有