【问题标题】:Ruby instance variable accessRuby 实例变量访问
【发布时间】:2012-01-11 04:35:04
【问题描述】:

只是好奇在设置了 attr_accessor 的情况下,从类中访问实例变量的最佳做法是什么。

class Test
  attr_accessor :user

  def initializer(user)
    @user = user
  end

  def foo
    @user
  end
end

class Test
  attr_accessor :user

  def initializer(user)
    @user = user
  end

  def foo
    self.user
  end
end

那么是通过实例变量(@user)还是getter方法(Test#user)?

【问题讨论】:

    标签: ruby


    【解决方案1】:

    Getter 方法,因为它更容易重构。假设您想在访问点更新时间戳。

    class Test
      def user
        @user.last_read = Time.now
        @user
      end
    end
    

    您对user 的所有引用都使用新逻辑进行了更新。如果您的参考是@user,那就不容易了。

    【讨论】:

    • 这个想法与红宝石无关。请参阅stackoverflow.com/questions/3069901,了解为什么属性比字段更受青睐。
    • 如果添加attr_accessor 只供内部使用怎么办?我不需要这些属性进行外部访问,那么此时是否不需要添加 attr_accessor,因此仅在内部使用实例变量来获取/设置更有意义?
    • @user577808 同样的原则适用于一个类,但上下文越小,它就越不重要,因为重构更容易。但是,最好公开一个类的最小接口,因此在这种情况下,如果您使用 get/set,它应该是私有的。
    猜你喜欢
    • 2016-09-18
    • 2015-12-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-10-13
    • 2013-07-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多