最近我一直在阅读“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
关于您是否应该尊重对象本身内的封装,争论不一,但如果您相信这一点,那么,是的,您应该这样做。
关于ruby - 为什么在初始化时不使用 setter 方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20547397/