Ruby 如何检查对象是否响应?MyObject#attr_reader:我的属性但不是setter
我正在为ruby gem编写一些测试 如何检查对象是否响应?MyObject#attr#u reader:my#u属性而非MyObject#attr#u writer:my#u属性或MyObject#my#u属性(值)#检查获取者: 我的对象。回应?:_属性 检查设置器: 我的对象。回应?:_属性=检查getter: 我的对象。回应?:_属性 检查设置器: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
我的对象。回应?:属性=
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方法