Ruby中的fail关键字是做什么的?

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

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

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

fail方法有三个重载:

  • fail :引发一个RuntimeError而没有错误信息。

  • fail(string) :用string参数引发一个RuntimeError作为错误信息:

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

    例子:假设你定义了一个函数,如果给定一个错误的参数,它将会失败。 引发ArgumentError而不是RuntimeError会更好:

     fail ArgumentError, "Illegal String" 

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

     fail ArgumentError, "Illegal String", caller 

    caller是一个内核方法,它返回的forms为file:line: in 'method'forms的string数组的回溯file:line: in 'method'

没有参数,在$!中引发exception 或者引发一个RuntimeError if $! 是零。 使用单个String参数引发RuntimeError,并将该string作为消息。 否则,第一个参数应该是一个Exception类的名字(或者是一个发送exception消息时返回一个Exception对象的对象)。 可选的第二个参数设置与exception关联的消息,第三个参数是一个callback信息数组。 例外情况受到begin … end块的救援条款的限制。

来源: 内核模块上的Ruby文档 。

fail == raise

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

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

Rubocop说这两个词的用法;

“使用fail而不是raise来表示例外”。

'用raise而不是fail来重新抛出exception。

这是一个例子。

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

http://www.ruby-doc.org是你的朋友。; 当我googled rubydoc fail “ 内核 ”是第一击。 我的build议是,如果有疑问,请到这个定义性的东西的权威来源。