2009-03-06 12 views
8

Im Web surfen ich fand, dass die Ruby Time Klasse Time#advance hat. Wo ist das dokumentiert? Ich habe es in den Ruby-API-Dokumenten here nicht erwähnt.Wo ist Time.advance dokumentiert?

Die Suchfunktion für die API-Dokumentation gab an, dass es nirgendwo eine Methode namens "advance" gibt.

Dennoch 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 

andere Sache, die mir ein Rätsel ... In der Dokumentation für die Zeitklasse, das erste, was er sagt, ist „Implementiert die Erweiterungen der Time-Klasse, die beschrieben in der Dokumentation für die time.rb-Bibliothek. "

Bedeutet das "die Bibliothek time.rb implementiert Erweiterungen dieser Klasse?"

Ich dachte, vielleicht ist das, wo Time # Advance kam, aber alles, was ich fand, war this.

Antwort

5

Es ist eigentlich im ActiveSupport::CoreExtensions::Numeric::Time Modul.

Dies ist einer meiner Fehler mit Ruby - es ist unmöglich, eine umfassende Dokumentation für jede Methode zu finden, die ein Objekt hat, weil sich die Methodenliste abhängig vom Kontext ändert. Mächtig und doch irritierend.

Ich arbeite an einer großen Rails App, die ich ursprünglich nicht geschrieben habe, und hin und wieder google ich eine Methode, die ich für ein paar Minuten nicht erkenne, bevor ... yep, der vorherige Entwickler definiert es in/lib.

+1

Für den Einsatz außerhalb der Gleise: Im Terminal: 'gem install activesupport', in x.rb:' require 'active_support/time'' –

3

Dies ist mit vielen anderen Erweiterungen von Time Teil von ActiveSupport, die Sie wahrscheinlich als Teil von Rails erworben haben, obwohl die Bibliothek selbst durchaus verwendbar ist.

Siehe documentation

3

Dies ist eine Antwort Ihre zweite Frage.

In den Dokumenten für die Zeitklasse heißt es zuerst "Implementiert die Erweiterungen für die Klasse Time, die in der Dokumentation für die Bibliothek time.rb beschrieben werden."

Bedeutet das "die Bibliothek time.rb implementiert Erweiterungen dieser Klasse?"

ist die Zeit Klasse an vielen Orten geöffnet:

  • in Ruby:
    • time.c
    • lib/date.rb
    • lib/rss/rss.rb
    • lib/Zeit.rb
    • lib/yaml/rubytypes.rb
  • in Rails:
    • Active/lib/Active/Kern-ext/numerisch/time.rb

APIdock unterscheidet zwischen Ruby und Rails, aber "kombiniert" die RDocs eines einzelnen Elements, wenn es mehrfach in einem Projekt definiert ist. Wenn für ein einzelnes Element mehrere RDocs vorhanden sind (wie in diesem Fall die Time-Klasse), wird nur eine davon angezeigt, die anderen nicht. Dies kann verwirrend sein.

Dieser Text:

Implementiert die Erweiterungen der Zeitklasse, die in der Dokumentation für die time.rb Bibliothek beschrieben sind.

... kommt von lib/time.rb. Es stammt aus der Standardbibliothek und erweitert die Time-Klasse der Core-Bibliothek (die in time.c definiert ist). Also müssen Sie anrufen ...

require 'time' 

... um die in time.rb definierten Erweiterungen zu verwenden. Ansonsten können Sie nur die in time.c definierten Methoden verwenden.

Verwandte Themen