上記のように、両方のスタイルは同等ですが、class << self
を使用すると、クラスメソッドにprivate
またはprotected
とマークすることができます。たとえば、
class UsingDefSelf
def self.a; 'public class method'; end
private
def self.b; 'public class method!'; end
end
class UsingSingletonClass
class << self
def a; 'public class method'; end
private
def b; 'private class method'; end
end
end
private
は、インスタンスメソッドにのみ影響します。シングルトンクラスを使用して、そのクラスのインスタンスメソッドを定義しています。これは、そのクラスを含むクラスのメソッドに変わります!
我々はまた、def self
とprivate
としてクラスメソッドをマークすることができます。
class UsingDefSelf
def self.a; 'private class method'; end
def self.b; 'private class method!'; end
private_class_method :a, :b
# In Ruby 2.1 there is an alternative syntax
private_class_method def self.c; 'private class method!'; end
end
しかし、私たちはprotected
としてそれらをマークすることはできません、何protected_class_method
はありません。 (ただし、classはそのシングルトンクラスの唯一のインスタンスなので、プライベートクラスメソッドと保護されたクラスメソッドは、呼び出し構文が異なる以外はほとんど同じです)
またを使用してprivate
クラスメソッド、 private_class_method
にすべてのメソッド名をリストするか、接頭語private_class_method
をすべてのプライベートクラスメソッド定義にリストする必要があるからです。
添付の説明がない場合は、真剣にスタイルの提案をするのは難しいですね。 –
「これはGitHub._の内部で独自のルビーアプリケーション用に使用するガイドです」ということに注意してください。つまり、これはGithubが独自に定義したスタイルです。 Rubyスタイルを修正するための決定的なガイドではありません。 –
私は同意しますが、権威のある熟練したRubyistsから書かれたようです。 –