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", callercaller是一个内核方法,它返回的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议是,如果有疑问,请到这个定义性的东西的权威来源。