class << self
attr_accessor :n, :totalX, :totalY
end
La sintaxis anterior se utiliza para definir variables de instancia de clase. Pero cuando pienso en lo que implica la sintaxis, no tiene ningún sentido para mí, así que me pregunto si este tipo de sintaxis se usa para cualquier otro tipo de definiciones. Mi punto de confusión aquí es la siguiente:En Ruby hay aplicaciones relacionadas de la sintaxis: class << self ... end
class << self
El operador de agregación normalmente significa "añadir lo que está a la derecha al objeto de la izquierda". Pero en el contexto de este bloque, ¿cómo se agrega eso para "poner los contenidos de este bloque en la definición de la instancia de clase en lugar de la instancia"?
Por la misma razón por la que estoy confundido en cuanto a por qué en un contexto de clase < < auto puede definir variables de instancia de clase, mientras que en otro se parece crear variables de clase, como aquí:
class Point
# Instance methods go here
class << self
# Class methods go here
end
end
Ok - que' Es una buena forma de ver que la clase es en realidad un diccionario. Pero en realidad usted respondió antes de agregar mi último ejemplo, donde en otro contexto el mismo sintaxis (según el libro que estoy leyendo) produce métodos de clase en lugar de métodos de instancia de clase. ¿Por qué el ejemplo de la clase Punto en la parte inferior da como resultado un método de clase, mientras que attr_accessor en la parte superior le proporciona atributos que están en el nivel de instancia de clase? –
En realidad, usando la explicación que me dio quizás pueda responder a la pregunta en mi comentario anterior: el método attr_accessor llama a los métodos instance_variable_set y instance_variable_get de la clase Class. Normalmente, eso daría como resultado la creación de variables de instancia, pero como estamos agregando al diccionario de la clase, como usted dice, estamos creando variables de instancia de clase. Ok, creo que lo tengo ahora. Gracias. –
-1 engañoso, ya que la clase << x ... end en realidad agrega información a la metaclase de x, no a la clase de x. – rampion