

RubyのExceptionをラッパーしようとして下記を見つけました

<https://gist.github.com/rks/2577339#gistcomment-1313963>

引用

[code]

    class ClientError < StandardError
      def initialize(e = nil)
        super e
        # Preserve the original exception's data if provided
        if e && e.is_a?(Exception)
          set_backtrace e.backtrace
          message.prepend "#{e.class}: "
        end
      end
    end
    
[/code]

<http://ruby-doc.org/core-2.2.0/Exception.html>  
を確認したところ

引用：

> new(msg = nil) → exception click to toggle source  
>  Construct a new Exception object, optionally passing in a message.

となっており、厳密な型まで記載されてはいないのですが、文字列を期待しているように思います。

ところが上記引用ソースを実際に試したところ問題なく動いたように思います。  
`super e`は正しいソースなのでしょうか？


CC BY-SA 3.0
2016-04-19T01:58:54.593
24133
2016-04-19T14:50:18.710
9008
question
ruby
RubyのExceptionのラッパーでinitializeのsuperの引数に何故Exceptionオブジェクトを渡せるのでしょうか？


文字列を期待しているわけではなく、`to_s`を実装しているものなら何でも良いから、なのではないでしょうか？

数値の 1 を渡しても、表示されますし。

[code]

    [8] pry(main)> e2 = ArgumentError.new(1)
    => #<ArgumentError: 1>
    [9] pry(main)> e2.message
    => "1"
    
[/code]


CC BY-SA 3.0
2016-04-19T14:50:18.710
24161
2016-04-19T14:50:18.710
7471
24133
answer