без разницы; класс исключения будет вызываться в любом случае.
Если вы предоставите строку в качестве аргумента для 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
, как было бы, если бы мы спасали сам класс исключения.