Los métodos de instancia se definen dentro de un bloque de definición de clase. Los métodos de clase se definen como métodos únicos en la clase singleton de una clase, también informalmente conocida como la "metaclase" o "clase de usuario". private
no es una palabra clave, sino un método (Module#private).
Esta es una llamada al método self#private
/A#private
, que "cambia" acceso privado durante todas las próximas definiciones de métodos instancia hasta toggled lo contrario:
class A
private
def instance_method_1; end
def instance_method_2; end
# .. and so forth
end
Como se señaló anteriormente, los métodos de clase son métodos muy simples definidos en el clase singleton.
def A.class_method; end
o utilizando una sintaxis especial para abrir el cuerpo de la definición de la clase anónima, Singleton de A:
class << A
def class_method; end
end
El receptor del "mensaje privado" - auto - dentro class A
es el objeto de clase A. self dentro del bloque class << A
es otro objeto, la clase singleton.
El siguiente ejemplo es, en realidad, llamando a dos métodos diferentes llamados privado, utilizando dos destinatarios o destinos diferentes para la llamada. En la primera parte, definimos un método de instancia privada ("en la clase A"), en este último definimos un método de clase privado (es de hecho un método singleton en el objeto de clase singleton de A).
class A
# self is A and private call "A.private()"
private def instance_method; end
class << self
# self is A's singleton class and private call "A.singleton_class.private()"
private def class_method; end
end
end
Ahora, vuelve a escribir este ejemplo un poco:
class A
private
def self.class_method; end
end
¿Se puede ver el error [que los diseñadores lenguaje Ruby] hicieron? Alterne el acceso privado para todos los métodos de instancia de próxima aparición de A, pero proceda a declarar un método singleton en una clase diferente, la clase singleton.
Acabo de ver este artículo discutir maneras de crear métodos de clase privada y pensaron que era buena: http://jakeyesbeck.com/2016/01/24/ruby- private-class-methods /?utm_source = rubyweekly & utm_medium = email –