在Ruby 2.1中,def
现在返回一个符号
[1] pry(main)> def foo; end
=> :foo
一个很酷的用例是因为private
和protected
是采用符号并将方法设为私有的方法,您现在可以create a private method like so:
private def foo
end
但是,我无法使用类方法。这段代码:
protected def self.baz
end
会出错:protected': undefined method 'baz' for class 'User' (NameError)"
。
有没有办法让它发挥作用?
答案 0 :(得分: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
块中执行的所有内容都将应用于类级别。导致私有/受保护的类方法。
答案 1 :(得分:4)
private
是一种用于将实例方法标记为私有的方法。类方法的等价物是private_class_method
,所以相同的习语会有点笨拙和多余:
private_class_method def self.foo
#...
end