0

オブジェクトに存在しないメソッドを呼び出すと、NoMethodErrorが発生します。

Object.new.foo

出力します:

NoMethodError:#の未定義のメソッド `foo'

その間

nil.foo

出力します:

NoMethodError:nil:NilClassの未定義のメソッド `foo'

自分の例外を発生させるときにこの動作をコピーしたい、つまり

foo = Object.new
raise StandardError, "#{foo} triggered an error"

これは出力します:

StandardError:#<Object:0xbf37748>エラーをトリガーしました

それはまさに私が欲しいものです。

不運にも

foo = nil
raise StandardError, "#{foo} triggered an error"

出力します

StandardError:エラーをトリガーしました

これはおそらくnil.to_sです""nil:NillClass出力として取得するにはどうすればよいですか?

4

2 に答える 2

1
raise StandardError, "#{foo.inspect}:#{foo.class} triggered an error"

編集。nilあなたは違った振る舞いをしたいようです。したがって、raiseステートメントで使用するためだけに別のメソッドを準備します。

class Object; def my_inspect; inspect end end
class NilClass; def my_inspect; "#{inspect}:#{self.class}" end end

raise StandardError, "#{foo.my_inspect} triggered an error"
于 2013-01-31T12:23:58.697 に答える
0

私はあなたが呼ぶことができると信じていますfoo.class。何かのようなもの:

raise StandardError, "#{foo.class} triggered an error"

これはNilClassのみを出力しますが、これは十分な情報を提供するはずです。

于 2013-01-31T11:32:34.640 に答える