2012-04-29 23 views
15

Encontré esto en el archivo Gemspec de surveyor gem. ¿Qué hace la siguiente línea?

$:.push File.expand_path("../lib", __FILE__) 
require "surveyor/version" 

¿Por qué la cosa $:.push hace? Para mí, parece que es requires el archivo ../lib/surveyor/version. si es así, ¿no puedo simplemente reemplazar eso con seguir una línea?

require File.expand_path('../lib/surveyor/version', __FILE__) 

¿Son estas mismas cosas? Si no, ¿cuál es la diferencia?

+4

Solo una nota al margen: '$ LOAD_PATH << File.expand_path ...' hace lo mismo y se ve un poco menos ofuscado, en mi humilde opinión. –

+0

de hecho, gracias por la sugerencia :) – CuriousMind

+3

Symbolhound.com es útil para buscar una sintaxis como esta. –

Respuesta

15

$: es camino de carga de Ruby, por lo que es, de hecho, la adición de la una subcarpeta /lib de una carpeta en la que reside __FILE__ a esta matriz, de modo que otros archivos de esta joya puede ser require d.

+0

Básicamente un atajo de tener que escribir la ruta completa. Eso lo explica. ¡Gracias! – CuriousMind

+0

@Gaurish: No solo eso. La gema puede asumir que está en la ruta de carga, en la cual no podrá cargarse si la necesita por ruta completa, sin agregarla a la ruta de carga. –