分享 Private Class Method

hiveer · 2015年01月07日 · 最后由 teddy_1004 回复于 2015年01月09日 · 2700 次阅读

私有方法是我们耳熟能详的一个词,我们时常会用到,不管是模仿还是自己的领悟。 比如:

class Project
  def find(id)
  end

  private

  def user
    current_user
  end
end

user 就是 Project 的一个私有方法(instance method)

  • 那如果需要定义一个 Project 的私有类方法呢? 这样: ```ruby class Project def find(id) end

private

def self.user current_user end end

测试发现这并不能成功!这个时候其实我们应该注意到一点,私有方法的一个特点就是不能显示的调用,而我们这里明显一开始就在违背这个原则,所以,这显然是有问题的。那么我们比照私有实例方法的定义,我们需要把当前类看做是一个实例,然后进入到其类中,简单讲就是要进入到单件类中去定义 private 方法。

```ruby
class Project
  def find(id)
  end

  class << self  

    private

    def user
      current_user
    end
  end
end

也可以

class Project
  def find(id)
  end

  def self.user
  end

  private_class_method :user
end
这个时候其实我们应该注意到一点,私有方法的一个特点就是不能显示的调用,而我们这里明显一开始就在违背这个原则,所以,这显然是有问题的。

这句指的是 self.user 吗?

所以,使用场景是啥呢..?

#3 楼 @flypiggys attr_accessor 就是一个类的私有方法。

#1 楼 @piecehealth 你这个方式更常用

#3 楼 @flypiggys 其实类也是对象,所以这个问题等同于在问 “我们什么时候该用私有方法”

赞,学习了!👍

需要 登录 后方可回复, 如果你还没有账号请 注册新账号