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

Non riesco a immaginare un caso d'uso per questo. Puoi?Perché Ruby ha Numeric.new?

+3

Significa 'Numeric.new' not' NumeriC# new' .... il '#' significa 'metodo di istanza' (ma in questo caso 'new' è un metodo di classe) – horseyguy

+0

Non lo so. Titolo corretto Grazie. – steenslag

risposta

3

La classe Class definisce un metodo new istanza. E così il metodo di classe new su Numeric è solo un residuo di ciò - non fa nulla - pensalo come uno di quegli organi rudimentali che gli animali ereditano da un antenato remoto - come l'appendice sugli umani.

noti che le sottoclassi di Numeric come Fixnum e Float e loro parenti esplicitamente undefine metodo new. Immagino che non si siano preoccupati di non definirlo per Numeric poiché le istanze dirette di questa classe non esistono mai realmente, e non fa male tenerla in giro.

+0

Sì, è così che l'ho scoperto. giocato in irb, cercando Float.new ('NaN'), fallendo (NoMethodError). Andando su Numeric.new ("NaN"), finendo con un inutile (?) Numerico. – steenslag

1

Tutto in Ruby è un oggetto, anche classi. Quindi, per non avere un costruttore per Numeric significherebbe che non c'è nessuna classe Numeric!

Dai uno sguardo allo the docs. È semplicemente una classe base. Non lo faresti mai (beh, sarebbe altamente improbabile, comunque :)) usarlo direttamente.

+2

Questo è sbagliato. Molte classi di Ruby non hanno il metodo 'new', vedi: TrueClass, FalseClass, NilClass, Fixnum, Float, ecc. – horseyguy

+1

Eh, un dettaglio minore. Una classe può indefinire il suo metodo 'nuovo' se lo desidera. Numerico non perché sei destinato a essere in grado di sottoclasse e usarlo come base te stesso. 'TrueClass' e simili non sono pensati per essere usati in questo modo. – rfunduk

+1

questo 'dettaglio minore' rende completamente invalida questa tua affermazione in grassetto: "Quindi non avere un costruttore per Numeric significherebbe che non esiste alcuna classe numerica!" – horseyguy

1

Non userete mai una classe numerica in questo modo. È la classe base di tutti i tipi numerici in Ruby.

classi numerici di Ruby formano un full tower numerico, fornendo molti tipi di rappresentazioni di numeri e rappresentazioni numeriche.

Fonte: Ruby Tips: Numeric Classes

+3

Ma non hai spiegato perché esiste ancora 'new' :) – horseyguy