【问题标题】:Can the Ruby 2.1 shorthand for private/protected be used for class methods?Ruby 2.1 的 private/protected 简写可以用于类方法吗?
【发布时间】:2014-08-25 23:54:15
【问题描述】:

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

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

一个很酷的用例是因为privateprotected 是采用符号并将方法设为私有的方法,您现在可以create a private method like so

private def foo
end

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

protected def self.baz
end

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

有没有办法让它工作?

【问题讨论】:

    标签: ruby private protected ruby-2.1


    【解决方案1】:

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

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

    或一次尝试:

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

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

    【讨论】:

      【解决方案2】:

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

      private_class_method def self.foo
        #...
      end
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2017-08-21
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-03-31
        • 1970-01-01
        相关资源
        最近更新 更多