From: "nobu (Nobuyoshi Nakada)" Date: 2013-09-15T15:06:15+09:00 Subject: [ruby-core:57207] [ruby-trunk - Feature #8912] Exception.raise Issue #8912 has been updated by nobu (Nobuyoshi Nakada). Subject changed from Exception#raise to Exception.raise Description updated How can you pass erred location and backtrace? You can call Kernel.raise as: class Exception def self.raise(*args) Kernel.raise(new(*args)) end end And you seem talking about Exception.raise, not Exception#raise. ---------------------------------------- Feature #8912: Exception.raise https://bugs.ruby-lang.org/issues/8912#change-41819 Author: sawa (Tsuyoshi Sawada) Status: Feedback Priority: Normal Assignee: Category: Target version: =begin When we have a custom exception class with a custom (({initialize})) method whose arity is not (({1})): class MyException < StandardError def initialize x, y super("Something went wrong with #{x.inspect} because #{y}, blah blah") end end in order to raise it, we have to create a new instance of it explicitly using (({new})), and embed that under (({Kernel#raise})). raise(MyException.new(:foo, :bar)) This is inconvenient, and does not look object oriented. I propose that there should be (({Exception#raise})), which is public, so that we can do: MyException.raise(:foo, :bar) A Ruby implementation may be like this: class Exception def self.raise *args; Kernel.send(:raise, *args) end end This will disallow us from calling the private method (({Kernel#raise})) (without an explicit receiver) within the context of an (({Exception})) class unless we use (({send})), but I think such use case is rare, and that should not be a problem. =end -- http://bugs.ruby-lang.org/