Si `main` es una instancia de` Object`, ¿por qué no puedo llamarlo?

Cuando escribo self , obtengo un valor de retorno main . Hice esta prueba:

 main2 = Object.new 

Entonces puedo llamar a main2 , y me devuelve algo, pero cuando llamo a main , genera un error de variable indefinida. ¿Como sucedió esto?

Esta es la suposición que encontré en otro sitio sobre cómo funciona este entorno de nivel superior:

 class Object Object.new.instance_eval do def self.to_s "main" end private ## # Your program gets inserted here... ## end end 

Tiene sentido para mí.

” ¿Qué es el nivel superior de Ruby? ” Es un artículo sobre el nivel superior de Ruby que explica todo lo que necesita saber.

Sin embargo, como un aparte, puede acceder a main en cualquier parte de su progtwig usando TOPLEVEL_BINDING.eval('self') .

La evaluación de la expresión self en irb devuelve un objeto que se imprime como principal. Aquí hay una transcripción que debería ayudar:

 $ irb >> self => main >> main NameError: undefined local variable or method `main' for main:Object from (irb):2 >> self.inspect => "main" >> self.class >> Object 

Cuando escribes main en irb, intenta evaluar la variable main que no está declarada.

No puedes referirte al objeto main directamente con algo como

 myvar = main 

No es posible referirse a él por su “nombre”. Sin embargo, puedes capturarlo en una variable llamada main como esta

 main = self puts main # => main 

” ¿Objeto de nivel superior? ¿Métodos de nivel superior? ” es información de fondo útil sobre el objeto principal por el mismo inventor de Ruby.