最近我一直在阅读“
Ruby中的实用面向对象设计”,我注意到最好的做法之一是使用访问器方法,而不是直接抓取@instance_variable.例如:
class Foo attr_accessor :bar def initialize(my_argument) @bar = my_argument end # bad # def lorem_ipsum # @bar * 999 # end # good def lorem_ipsum bar * 999 end end
将事情保持干预是有道理的,如果我需要在实际抓住其值之前处理@bar.但是,我注意到,initialize方法直接设置了@bar实例变量的值:
class Foo attr_accessor :bar def initialize(my_argument) @bar = my_argument #<-- why isn't self.bar = my_argument used here? end
有没有理由呢?不应该使用setter方法,而不是直接使用=操作符来设置实例变量的值?
解决方法
你说得对,这样做会更有意义
class Foo attr_accessor :bar def initialize(my_argument) self.bar = my_argument end end
关于您是否应该尊重封装在对象本身内部的参数不同,但如果您相信这一点,那么是的,您应该这样做.