我见过使用类引发异常的Ruby代码:
raise GoatException, "Maximum of 3 goats per bumper car."
其他代码使用实例:
raise GoatException.new "No leotard found suitable for goat."
这两个都以同样的方式获救。有没有理由使用实例与类?
答案 0 :(得分:11)
没有区别;在任何一种情况下,异常类都将被公开。
如果你提供一个字符串,作为new
的参数或作为raise
的第二个参数,它将被传递给initialize
并将成为异常实例的.message
}。
例如:
class GoatException < StandardError
def initialize(message)
puts "initializing with message: #{message}"
super
end
end
begin
raise GoatException.new "Goats do not enjoy origami." #--|
# | Equivilents
raise GoatException, "Goats do not enjoy origami." #--|
rescue Exception => e
puts "Goat exception! The class is '#{e.class}'. Message is '#{e.message}'"
end
如果您对上面的第一个raise
发表评论,您会看到:
initialize
。GoatException
,而不是class
,就像我们正在拯救异常类本身一样。