gpt4 book ai didi

Ruby 的 raise 方法和隐式强制转换

转载 作者:太空宇宙 更新时间:2023-11-03 17:55:11 31 4
gpt4 key购买 nike

考虑以下两种引发异常的方式-

class ExampleError < StandardError; end

raise ExampleError.new

raise ExampleError

第一种方式,ExampleError的一个实例被赋予方法 raise . raise方法可以接受 Exception参数,一切都清楚。

第二种方式a Class实例已提供给该方法,但这仍然有效。

由于 raise可以接受String , 是否存在来自 Class 的参数的隐式转换至 String

谢谢

最佳答案

不,它不会转换为 String。事实上,你的假设是错误的。 raise 不需要某个异常类的实例。它宁愿拥有异常类本身。请参阅 Kernel#raise 的文档:

... With a single String argument, raises a RuntimeError with the string as a message. Otherwise, the first parameter should be the name of an Exception class (or an object that returns an Exception object when sent an exception message). ...

因此,您可以将任何内容传递给raise,只要它是字符串或具有exception 方法即可。您的两个变体都在这里传递:

class ExampleError < StandardError; end

ExampleError.exception # => #<ExampleError: ExampleError>
ExampleError.new.exception # => #<ExampleError: ExampleError>

关于Ruby 的 raise 方法和隐式强制转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15530805/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com