我正在学习Ruby并遇到fail
个关键字。这是什么意思?
if password.length < 8
fail "Password too short"
end
unless username
fail "No user name set"
end
答案 0 :(得分:126)
在Ruby中,fail
与raise
同义。 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是一个回调信息数组。例外被捕获 通过开始...结束块的救援条款。
答案 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”是第一次点击。我的建议是,如果有疑问,请找到这样的定义内容的权威来源。