加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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

发布时间:2020-12-16 22:20:10 所属栏目:百科 来源:网络整理
导读:最近我一直在阅读“ Ruby中的实用面向对象设计”,我注意到最好的做法之一是使用访问器方法,而不是直接抓取@instance_variable.例如: class Foo attr_accessor :bar def initialize(my_argument) @bar = my_argument end # bad # def lorem_ipsum # @bar * 9
最近我一直在阅读“ 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

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读