0

在 Ruby 2.1 中,def现在返回一个符号

[1] pry(main)> def foo; end
=> :foo

一个很酷的用例是,因为privateprotected是采用符号并将方法设为私有的方法,您现在可以像这样创建私有方法

private def foo
end

但是,我不能让它与类方法一起使用。这段代码:

protected def self.baz
end

将出错:protected': undefined method 'baz' for class 'User' (NameError)"

有没有办法让它工作?

4

2 回答 2

5

您可以通过使用类的单例类来实现:

class Foo
  def self.baz
    ...
  end

  class << self
    private :baz
  end
end

或一次尝试:

class Foo
  class << self
    private def baz
      ...
    end
  end
end

因此,class << self块中执行的所有内容都将应用于类级别。导致私有/受保护的类方法。

于 2014-08-25T15:38:42.297 回答
4

private是一种用于将实例方法标记为私有的方法。类方法的等价物是private_class_method所以等价的成语会有点笨拙和多余:

private_class_method def self.foo
  #...
end
于 2014-08-25T15:54:15.147 回答