分享 Private Class Method

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

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

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 其实类也是对象,所以这个问题等同于在问“我们什么时候该用私有方法”

赞,学习了!👍

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