2009-03-06 8 views
8

Guardando in giro sul Web ho scoperto che la classe Ruby Time ha Time#advance. Dove è documentato? Non ho visto alcuna menzione nei documenti API di Ruby here.Dove è documentato Time.advance?

La funzione di ricerca per i documenti API indicava che non esiste alcun metodo chiamato "anticipo" in nessun punto.

Ciò nonostante, in IRB ...

>> t = Time.now 
=> Thu Mar 05 16:08:57 -0800 2009 
>> t.advance :months => 1 
=> Sun Apr 05 16:08:57 -0700 2009 

Un'altra cosa che mi lascia perplesso ... nella documentazione per la classe di tempo, la prima cosa che dice è "implementa le estensioni della classe Ora che sono descritto nella documentazione per la libreria time.rb. "

Intendono "la libreria time.rb implementa estensioni a questa classe?"

Ho pensato che forse è da lì che è arrivato Time #, ma tutto quello che ho trovato era this.

risposta

5

In realtà nel modulo ActiveSupport::CoreExtensions::Numeric::Time.

Questa è una delle mie lamentele con Rubino - è impossibile trovare una documentazione completa per ogni metodo un oggetto ha, perché l'elenco metodo modifica a seconda del contesto. Potente, ma irritante.

Sto lavorando a un'app di Rails di grandi dimensioni che non ho scritto in origine, e di tanto in tanto faccio un metodo su Google che non riconosco per alcuni minuti prima di realizzare ... sì, lo sviluppatore precedente l'aveva definito in/lib.

+1

Per l'utilizzo al di fuori delle rotaie: nel terminale: 'gem install activesupport', in x.rb:' richiede 'active_support/time'' –

3

Questo, con molte altre estensioni di Time, fa parte di ActiveSupport, che è probabilmente acquisito come parte di Rails, sebbene la libreria sia completamente utilizzabile a pieno titolo.

Vedi l'documentation

3

questa è la tua seconda domanda una risposta.

Nei documenti per la classe di tempo, la prima cosa che dice è "Implementa le estensioni della classe Time che sono descritte nella documentazione per la libreria time.rb".

cosa significano "la biblioteca time.rb implementa le estensioni a questa classe?"

La classe volta che si apre in molti luoghi:

  • in Ruby:
    • time.c
    • lib/date.rb
    • lib/rss/rss.rb
    • lib/ora.rb
    • lib/yaml/rubytypes.rb
  • in Rotaie:
    • ActiveSupport/lib/ActiveSupport/core-ext/numerico/time.rb

APIdock distingue tra Ruby e Rails, ma "combina" RDoc di un singolo elemento quando è definito più volte in un progetto. Se sono presenti più RDoc per un singolo elemento (come la classe Time in questo caso), viene mostrato solo uno di essi e gli altri no. Questo può essere fonte di confusione.

Questo testo:

implementa le estensioni della classe Ora che sono descritti nella documentazione per la libreria time.rb.

... proviene da lib/time.rb. Proviene dalla libreria standard ed estende la classe Time della libreria principale (definita in time.c). Quindi, è necessario chiamare ...

require 'time' 

... per utilizzare le estensioni definite in time.rb. Altrimenti puoi utilizzare solo i metodi definiti in time.c.