Ruby 如何检查对象是否响应?MyObject#attr_reader:我的属性但不是setter

Ruby 如何检查对象是否响应?MyObject#attr_reader:我的属性但不是setter,ruby,metaprogramming,Ruby,Metaprogramming,我正在为ruby gem编写一些测试 如何检查对象是否响应?MyObject#attr#u reader:my#u属性而非MyObject#attr#u writer:my#u属性或MyObject#my#u属性(值)#检查获取者: 我的对象。回应?:_属性 检查设置器: 我的对象。回应?:_属性=检查getter: 我的对象。回应?:_属性 检查设置器: 我的对象。回应?:属性=attr\u reader:my\u属性本质上是 def my_property @my_property en

我正在为ruby gem编写一些测试

如何检查对象是否响应?MyObject#attr#u reader:my#u属性而非MyObject#attr#u writer:my#u属性或MyObject#my#u属性(值)#检查获取者: 我的对象。回应?:_属性

检查设置器: 我的对象。回应?:_属性=

检查getter: 我的对象。回应?:_属性

检查设置器:
我的对象。回应?:属性=

attr\u reader:my\u属性本质上是

def my_property
  @my_property
end
同样地,
attr\u writer:my\u属性是

def my_property=(val)
  @my_property = val
end
请注意,
attr_writer
定义的方法以和等号结尾;这意味着
obj.my_property=foo
被解释为
obj.my_property=(foo)
;这就是在ruby中如何定义setter,而getter只是不接受参数并返回值的方法


那么,回到原来的问题。如果
obj.response\u to?:my_属性
返回true,这意味着设置了它的getter。(注意,由于getter只是普通的方法,您无法确定该方法实际上是getter还是完全无关的方法)同样,如果
obj.respond\u to?:my_属性=
返回true,这意味着设置了setter方法。

attr_reader:my_属性本质上是

def my_property
  @my_property
end
同样地,
attr\u writer:my\u属性是

def my_property=(val)
  @my_property = val
end
请注意,
attr_writer
定义的方法以和等号结尾;这意味着
obj.my_property=foo
被解释为
obj.my_property=(foo)
;这就是在ruby中如何定义setter,而getter只是不接受参数并返回值的方法

那么,回到原来的问题。如果
obj.response\u to?:my_属性
返回true,这意味着设置了它的getter。(注意,由于getter只是普通的方法,您无法确定该方法实际上是getter还是完全无关的方法)同样,如果
obj.respond\u to?:my_property=
返回true,这意味着设置了setter方法