fail关键字在Ruby中有什么作用?

时间:2013-09-15 11:09:29

标签: ruby

我正在学习Ruby并遇到fail个关键字。这是什么意思?

if password.length < 8
   fail "Password too short"
end
unless  username
   fail "No user name set"
end

4 个答案:

答案 0 :(得分:126)

在Ruby中,failraise同义。 fail关键字是Kernel模块的一种方法,它包含在类Object中。 fail方法会像raise关键字一样引发运行时错误。

fail方法有三个重载:

  • fail:在没有错误消息的情况下引发RuntimeError

  • fail(string):使用字符串参数引发RuntimeError作为错误消息:

    fail "Failed to open file"
    
  • fail(exception [, string [, array]]):使用可选的错误消息(第二个参数)和回调信息(第三个参数)引发类exception(第一个参数)的异常。

    示例:假设您定义了一个在给定错误参数时应该失败的函数。最好是提出ArgumentError而不是RuntimeError

    fail ArgumentError, "Illegal String"
    

    另一个示例:您可以将整个backtrace传递给fail方法,以便您可以访问rescue块内的跟踪:

    fail ArgumentError, "Illegal String", caller
    

    caller是一个内核方法,它将回溯作为file:line: in 'method'形式的字符串数组返回。

  

没有参数,在$中引发异常!或者引发RuntimeError   如果$!没有。使用单个String参数,会引发RuntimeError   将字符串作为消息。否则,第一个参数应该是   Exception类的名称(或返回Exception的对象)   对象在发送异常消息时)。可选的第二个参数   设置与异常相关的消息,第三个   parameter是一个回调信息数组。例外被捕获   通过开始...结束块的救援条款。

来源:Ruby Documentation on the Kernel Module

答案 1 :(得分:27)

fail == raise

换句话说,fail只是raise错误提升方法的常用别名。用法:

fail ArgumentError, "Don't argue with me!"

答案 2 :(得分:25)

Rubocop说明了两个词的用法;

  

'使用fail代替raise来表示异常。'

     

'使用raise代替fail来重新抛出例外。'

这是一个例子。

def sample
  fail 'something wrong' unless success?
rescue => e
  logger.error e
  raise
end

答案 3 :(得分:7)

www.ruby-doc.org是你的朋友。当我用Google搜索rubydoc fail时,“Kernel”是第一次点击。我的建议是,如果有疑问,请找到这样的定义内容的权威来源。