2009-03-06 19 views
8

Buscando en la Web encontré que la clase Ruby Time tiene Time#advance. ¿Dónde está esto documentado? No vi mencionarlo en los documentos Ruby API here.¿Dónde se documenta Time.advance?

La función de búsqueda para los documentos API indicaba que no hay ningún método llamado "avance" en ninguna parte.

No obstante, en el IRB ...

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

Otra cosa que me intriga ... En la documentación para la clase de tiempo, lo primero que dice es "implementa las extensiones a la clase de tiempo que se descrito en la documentación de la biblioteca time.rb ".

¿Significan "la biblioteca time.rb implementa extensiones a esta clase?"

Pensé que tal vez de ahí venía el avance del Time # pero todo lo que encontré fue this.

Respuesta

5

En realidad está en el módulo ActiveSupport::CoreExtensions::Numeric::Time.

Esta es una de mis quejas con Ruby: es imposible encontrar documentación exhaustiva para cada método que tiene un objeto, porque la lista de métodos cambia según el contexto. Potente, pero irritante.

Estoy trabajando en una gran aplicación de Rails que no escribí originalmente, y de vez en cuando googleo un método que no reconozco por unos minutos antes de darme cuenta ... sí, el desarrollador anterior lo definió en/lib.

+1

Para usar fuera de los rieles: en la terminal: 'gem install activesupport', en x.rb:' require 'active_support/time'' –

3

Esto, con muchas otras extensiones de Time, es parte de ActiveSupport, que probablemente haya adquirido como parte de Rails, aunque la biblioteca es completamente utilizable en sí misma.

Véase el documentation

3

Esta es la respuesta a su segunda pregunta.

En los documentos para la clase de tiempo, lo primero que dice es "Implementa las extensiones a la clase Time que se describen en la documentación de la biblioteca time.rb".

¿Significan "la biblioteca time.rb implementa extensiones a esta clase?"

La clase vez que se abre en muchos lugares:

  • en Ruby:
    • time.c
    • lib/date.rb
    • lib/RSS/rss.rb
    • lib/time.rb
    • lib/yaml/rubytypes.rb
  • en rieles:
    • ActiveSupport/lib/ActiveSupport/núcleo-ext/numérico/time.rb

APIdock distingue entre Ruby y Rails, pero "combina" los RDoc de un solo elemento cuando se define varias veces en un proyecto. Si hay varios RDoc para un solo elemento (como la clase Time en este caso), solo se muestra uno de ellos y los demás no. Esto puede ser confuso.

Este texto:

Implementa las extensiones a la clase de tiempo que se describe en la documentación de la biblioteca time.rb.

... viene de lib/time.rb. Es de la biblioteca estándar y amplía la clase de tiempo de la biblioteca central (que se define en time.c). Entonces, necesita llamar ...

require 'time' 

... para usar las extensiones definidas en time.rb. De lo contrario, solo puede usar los métodos definidos en time.c.