2010-10-04 32 views
5
a = Numeric.new # doesn't take an argument 

No puedo imaginar un caso de uso para esto. ¿Puedes?¿Por qué Ruby tiene Numeric.new?

+3

Quiere decir 'Numeric.new' no' NumeriC# new' .... the '#' significa 'instancia de método' (pero en este caso 'new' es un método de clase) – horseyguy

+0

No lo sabía. Título corregido Gracias. – steenslag

Respuesta

3

La clase Class define un método new ejemplo. Y entonces el método de clase new en Numeric es solo un vestigio de eso, no hace nada, piensa en él como uno de esos órganos vestigiales que los animales heredan de un antepasado distante, como el apéndice sobre humanos.

Tenga en cuenta que las subclases de Numeric como Fixnum y Float y sus parientes explicitamente undefine el método new. Supongo que simplemente no se molestaron en definirlo como Numeric ya que las instancias directas de esta clase nunca existieron realmente, y no hace daño mantenerlas.

+0

Sí, así es como me enteré. jugó en IRB, probando Float.new ('NaN'), fallando (NoMethodError). Yendo por Numeric.new ("NaN '), terminando con un inútil (?) Numérico. – steenslag

1

Todo en Ruby es un objeto, incluso clases. ¡Así que no tener un constructor para Numeric significaría que no hay una clase Numeric en absoluto!

Eche un vistazo a the docs. Es simplemente una clase base. Nunca (bueno, sería muy poco probable, de todos modos :)) usarlo directamente.

+2

Esto está mal. Muchas clases de Ruby no tienen el método 'new', vea: TrueClass, FalseClass, NilClass, Fixnum, Float, etc. – horseyguy

+1

Eh, un detalle menor. Una clase puede definir su método 'nuevo' si lo desea. Numeric no funciona porque tienes que poder subclasificarlo y usarlo como base. 'TrueClass' y similares no están destinados a ser usados ​​así. – rfunduk

+1

ese 'detalle menor' hace que esta afirmación audaz tuya sea completamente inválida: "¡Así que no tener un constructor para Numérico significaría que no hay ninguna clase Numérica en absoluto!" – horseyguy

1

Nunca usará la clase numérica de esa manera. Es la clase base para todos los tipos numéricos en Ruby.

clases numéricas de Ruby forman un completo torre numérica, proporcionando muchos tipos de representaciones de números y representaciones numéricas .

Fuente: Ruby Tips: Numeric Classes

+3

Pero no explicó por qué 'new' todavía existe :) – horseyguy

Cuestiones relacionadas