En cada instante de la ejecución del programa, hay uno y sólo un self: el objeto que se está usando en ese instante.
Contexto del nivel superior
El contexto del nivel superior se produce si no se ha entrado en otro contexto, por ejemplo, la definición de una clase. Por la tanto, el término "nivel superior" se refiere al código escrito fuera de las clases o módulos. Si abres un fichero de texto y escribes:
x = 1
habrás creado una variable local en el nivel superior. Si escribes:
def m end
habrás creado un método en el nivel superior: un método que no es definido como un método de una clase o módulo. Si nada más arrancar el intérprete, tecleas:
puts self
La respuesta es main, un término que se refiere al objeto que se crea al iniciar el intérprete.
self dentro de clases y módulos
En una clase o definición de módulo, self es la clase o el módulo al que pertenece el objeto:
class S puts 'Comenzó la clase S' puts self module M puts 'Módulo anidado S::M' puts self end puts 'De regreso en el nivel más superficial de S' puts self end
La salida es:
Comenzó la clase S S Módulo anidado S::M S::M De regreso en el nivel más superficial de S S
self dentro de los métodos
class S def m puts 'Clase S, metodo m:' puts self # <S:0x2835908> end end s = S.new s.m