ruby – 为什么初始化中不使用setter方法?

前端之家收集整理的这篇文章主要介绍了ruby – 为什么初始化中不使用setter方法?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
最近我一直在阅读“ 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方法,而不是直接使用=操作符来设置实例变量的值?

@H_301_11@解决方法
你说得对,这样做会更有意义
class Foo
  attr_accessor :bar

  def initialize(my_argument)
    self.bar = my_argument
  end
end

关于您是否应该尊重封装在对象本身内部的参数不同,但如果您相信这一点,那么是的,您应该这样做.

猜你在找的Ruby相关文章