¿Qué es "principal" en Ruby?


Si corro este archivo como "ruby x.rb":

class X
end
x = X.new

¿Qué es lo que está llamando "X.new"?

Es un objeto/proceso/etc?

 40
Author: lorz, 2009-05-28

5 answers

Todo en Ruby ocurre en el contexto de algún objeto. El objeto en el nivel superior se llama "principal". Es básicamente una instancia de Objeto con la propiedad especial que cualquier método definido allí se agrega como métodos de instancia de Objeto (por lo que están disponibles en todas partes).

Así que podemos hacer un script que consiste enteramente en:

puts object_id
@a = 'Look, I have instance variables!'
puts @a

Y se imprimirá "105640" y " Mira, tengo variables de instancia!".

No es algo con lo que generalmente deba preocuparse, pero está ahí.

 47
Author: Chuck,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2009-05-27 21:01:24

El llamador de nivel superior es un objeto main, que es de la clase Object.

Pruebe este programa ruby:

p self
p self.class
 12
Author: Igor Krivokon,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2009-05-27 20:30:14

Es la clase X. Está invocando el método "new" que crea un objeto de clase X. Así que, si ejecuta este texto como un script, Ruby:

  • crea una nueva clase X que es una subclase de Object, y que automáticamente (como una subclase de Object) hereda algunos métodos, de los cuales new es uno.
  • establece un nombre x
  • llama al método new en esa nueva clase X, creando un objeto de instancia X; x obtiene una referencia a ese objeto.
 3
Author: Charlie Martin,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-02-08 03:34:55

Es el intérprete de ruby que ejecuta la línea

x = X.new

Al igual que con muchos lenguajes de scripting, el script se interpreta de arriba a abajo en lugar de tener un método de punto de entrada estándar como la mayoría de los lenguajes compilados.

 2
Author: workmad3,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2009-05-27 20:21:15

Como dijo Charlie Martin, X. new es una llamada al constructor en la clase X, que devuelve un objeto de tipo X, almacenado en la variable x.

Basado en su título, creo que está buscando un poco más. Ruby no necesita un main, ejecuta el código en el orden en que lo ve. Por lo tanto, las dependencias deben incluirse antes de que se llamen.

Por lo tanto, su principal es cualquier código de estilo procedimental que esté escrito fuera de una definición de clase o módulo.

 1
Author: Tim Hoolihan,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2009-05-27 20:23:35