当您调用对象上不存在的方法时,将引发NoMethodError,即
Object.new.foo
将输出:
NoMethodError:#
的未定义方法`foo'
,而
nil.foo
将输出:
NoMethodError:nil的未定义方法`foo':NilClass
我想在提出我自己的例外时复制这种行为,即
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
作为输出?
答案 0 :(得分: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"
答案 1 :(得分:0)
我相信你可以致电foo.class
。类似的东西:
raise StandardError, "#{foo.class} triggered an error"
这只会输出NilClass,但这应该足够提供信息。