Ruby中的fail关键字是做什么的?
我正在学习Ruby,遇到了fail
关键字。 这是什么意思?
if password.length < 8 fail "Password too short" end unless username fail "No user name set" end
在Ruby中, fail
与raise
是同义的。 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议是,如果有疑问,请到这个定义性的东西的权威来源。