我正在为红宝石宝石编写一些测试......
如何检查对象是否响应?MyObject#attr_reader :my_property 但不是 MyObject#attr_writer :my_property 或 MyObject#my_property(value) # <= setter?
大量示例只是检查所有内容,但。有任何想法吗?
我正在为红宝石宝石编写一些测试......
如何检查对象是否响应?MyObject#attr_reader :my_property 但不是 MyObject#attr_writer :my_property 或 MyObject#my_property(value) # <= setter?
大量示例只是检查所有内容,但。有任何想法吗?
attr_reader :my_property
本质上是语法糖
def my_property
@my_property
end
同样,attr_writer :my_property
是简写
def my_property=(val)
@my_property = val
end
注意定义的方法attr_writer
以和等号结尾;这意味着 obj.my_property = foo
被解释为obj.my_property=(foo)
; 这就是在 ruby 中定义 setter 的方式,而 getter 只是不带参数并返回值的简单方法。
所以,回到最初的问题。如果obj.respond_to? :my_property
返回 true,则意味着它的 getter 已设置。(请注意,由于 getter 只是普通方法,您无法确定该方法实际上是 getter 还是完全不相关的方法)同样如果obj.respond_to? :my_property=
返回 true,则表示 setter 方法已设置。
检查吸气剂: my_object.respond_to? :the_property
检查设置器: my_object.respond_to?:the_property=