0

当您调用对象上不存在的方法时,将引发 NoMethodError,即

Object.new.foo

将输出:

NoMethodError: 未定义的方法 `foo' for #

尽管

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_sis ""。我如何获得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 回答