我正在学习Ruby,遇到了fail
关键字。它是什么意思?
if password.length < 8
fail "Password too short"
end
unless username
fail "No user name set"
end
我正在学习Ruby,遇到了fail
关键字。它是什么意思?
if password.length < 8
fail "Password too short"
end
unless username
fail "No user name set"
end
在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"
另一个例子:你可以将整个回溯信息传递给fail
方法,以便在rescue
块中访问该跟踪:
fail ArgumentError, "Illegal String", caller
caller
是一个 Kernel 方法,它以 file:line: in 'method'
的形式将回溯信息作为字符串数组返回。
当没有参数时,会抛出 $! 中的异常或者如果 $! 为空则抛出 RuntimeError 异常。当只有一个字符串参数时,会使用该字符串作为消息抛出 RuntimeError 异常。否则,第一个参数应该是 Exception 类的名称(或一个发送异常消息时返回 Exception 对象的对象)。可选的第二个参数设置与异常关联的消息,第三个参数是一个回调信息数组。异常可以被 begin...end 块的 rescue 子句捕获。
raise
。 - paulRubocop 建议在引发异常时使用 fail
代替 raise
。
当重新抛出异常时,请使用 raise
代替 fail
。
以下是一个示例:
def sample
fail 'something wrong' unless success?
rescue => e
logger.error e
raise
end
fail
== raise
换句话说,fail
只是raise
错误抛出方法的一个常用别名。使用方法如下:
fail ArgumentError, "Don't argue with me!"
www.ruby-doc.org是你的好朋友。当我谷歌搜索rubydoc fail
时,"Kernel"是第一个搜索结果。我的建议是,在怀疑时,去这个权威定义来源进行定义性的查询。
fail "密码太短" if password.length < 8
和fail "未设置用户名" unless username
。 - PhilT