¿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?
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í.
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
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 claseX
, creando un objeto de instancia X; x obtiene una referencia a ese objeto.
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.
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.
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