Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

235
Views
Creando clases anónimas en ruby.

De acuerdo con el "rubiista bien molido" en el ejemplo c "contiene" o "apunta a" una clase anónima. ¿Tengo razón, que C no es una clase anónima? Eso es realmente un poco confuso.

 >> c = Class.new => #<Class:0x0000000006c4bd40> >> o1 = c.new => #<#<Class:0x0000000006c4bd40>:0x0000000006b81ec8> >> o1.class => #<Class:0x0000000006c4bd40> >> >> C = Class.new => C >> o2 = C.new => #<C:0x0000000006494480> >> o2.class => C
over 4 years ago · Santiago Trujillo
2 answers
Answer question

0

  • Class.new crea una nueva clase anónima (sin nombre)

  • c = Class.new crea una nueva clase anónima y la asigna a la variable local c

  • C = Class.new crea una nueva clase anónima y la asigna a la constante C

Aunque ambas asignaciones parecen casi idénticas, hay una diferencia sutil pero importante: asignar una clase anónima a una constante establece el name de esa clase con el nombre de la constante:

 c = Class.new c.name #=> nil C = Class.new C.name #=> "C"

Esto también se menciona en los documentos de Class.new :

Puede dar un nombre a una clase asignando el objeto de clase a una constante.

En este punto, la clase ya no es anónima. Ahora tiene un nombre y podemos referirnos a él usando ese nombre en la forma de la constante C .

over 4 years ago · Santiago Trujillo Report

0

El concepto de una clase "anónima" o "nombrada" realmente no tiene sentido en Ruby. Una clase es solo un objeto como cualquier otro objeto. Tampoco tenemos enteros o cadenas "anónimos" o "con nombre". Una clase es simplemente un objeto como un entero o una cadena: se puede devolver desde un método, se puede asignar a una variable local, una variable de instancia, una variable de clase, una variable global o una constante.

Esto es diferente de los lenguajes de programación como Java con un sistema de tipo nominativo, donde un tipo que tiene o no tiene un nombre hace una gran diferencia.

Esto es realmente importante de entender: una clase es solo un objeto que resulta ser una instancia de la clase Class . Nada especial. Es solo un objeto como un número entero o una cadena o una matriz.

Lo que sí tienen las clases (en realidad, los módulos) es un método llamado Module#name , pero nuevamente, no hay nada especial en ese método. También puede agregar un método #name a sus propias clases.

Lo único que es especial es que cuando se asigna una clase (en realidad, un módulo) (ya sea usando el operador de asignación = , o reflexivamente usando el método Module#const_set ) la primera vez a una constante, la ruta a esa constante se convierte en el retorno valor de Module#name :

 a = Module.new a.name #=> nil b = a b.name #=> nil module A; module B; module C; end end end A::B::C.const_set(:D, b) a.name #=> 'A::B::C::D' A::B::C::D = nil A::B::C.send(:remove_const, :D) A::B::C = nil A::B.send(:remove_const, :C) A::B = nil A.send(:remove_const, :B) A = nil Object.send(:remove_const, :A) a.name #=> 'A::B::C::D'

Entonces, como puede ver, la distinción entre "anónimo" y "nombrado" es prácticamente inexistente, e incluso si pudiera construir una definición significativa, entonces la distinción sigue siendo irrelevante.

over 4 years ago · Santiago Trujillo Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!