在Ruby中,foo.inspect可以打印出所有实例变量——如果没有访问器,我们可以打印出单个实例变量吗?

在Ruby中,foo.inspect可以打印出所有实例变量——如果没有访问器,我们可以打印出单个实例变量吗?,ruby,Ruby,通常,我们可以使用p foo或foo.inspect查看实例变量,但这只是默认行为,对象可以选择显示其他内容(或隐藏所有实例变量)(可能是通过重新定义inspect方法) 主要问题是,如果我能看到foo.inspect中有@bar作为对象,具有实例变量@wah,其值为“hello”,如果@bar和@wah没有可用的访问器(读取器),我是否可以直接打印@wah?通常,如果没有访问器,它不应该是可读的,但如果出于调试目的呢?尝试从类外打印attr_writer定义的变量将抛出错误(未定义的方法“wa

通常,我们可以使用
p foo
foo.inspect
查看实例变量,但这只是默认行为,对象可以选择显示其他内容(或隐藏所有实例变量)(可能是通过重新定义
inspect
方法)


主要问题是,如果我能看到
foo.inspect
中有
@bar
作为对象,具有实例变量
@wah
,其值为
“hello”
,如果
@bar
@wah
没有可用的访问器(读取器),我是否可以直接打印
@wah
?通常,如果没有访问器,它不应该是可读的,但如果出于调试目的呢?

尝试从类外打印attr_writer定义的变量将抛出错误(
未定义的方法“wah”用于#
)-但出于调试目的,您可以这样使用:


在Ruby中,可以使用反射绕过所有访问保护:

@bar.instance_variable_get(:@wah)

这是因为attr_*生成的是方法,而不是变量。
@bar.instance_variable_get(:@wah)