2009-12-13 19 views
50

He estado jugando con Ruby on Rails por un tiempo y he decidido echar un vistazo a la fuente real. Agarró el repo de GitHub y comenzó a mirar alrededor. Encontré un código que no estoy seguro de qué hace o qué hace referencia.

vi este código en actionmailer/test/abstract_unit.rb

root = File.expand_path('../../..', __FILE__) 
begin 
require "#{root}/vendor/gems/environment" 
rescue LoadError 
$:.unshift("#{root}/activesupport/lib") 
$:.unshift("#{root}/actionpack/lib") 
end 

lib = File.expand_path("#{File.dirname(__FILE__)}/../lib") 
$:.unshift(lib) unless $:.include?('lib') || $:.include?(lib) 

require 'rubygems' 
require 'test/unit' 

require 'action_mailer' 
require 'action_mailer/test_case' 

Puede alguien decirme lo que el $: (también conocido como "bling") hace referencia?

Respuesta

4

Para citar el rubí Ruby Forum:

viene con un conjunto de variables predefinidas

$: = default search path (array of paths) 
__FILE__ = current sourcefile 

si lo estoy haciendo bien (no es 100% seguro) esto se suma el camino lib a esta matriz de rutas de búsqueda revisando el archivo actual. que no es precisamente la mejor manera , yo simplemente empezar con RAILS_ROOT (al menos para un proyecto rieles)

2
$:.unshift 

es lo mismo que

$LOAD_PATH.unshift 

. También puede decir:

$: << 
$LOAD_PATH << 

Son expresiones de Ruby bastante comunes para establecer una ruta de carga.

54

$ identifica una variable global, a diferencia de una variable local, @ variable de instancia o @@ variable de clase.

Entre las variables globales del lenguaje suministrados son $:, que también se identifica por $LOAD_PATH

1

Quiero nota algo raro sobre Ruby!

$ significa camino de carga. Y ; significa "línea final". ¡Pero!

$; significa separador de campo. Intenta ejecutar $;.to_s en tu REPL y verás que devuelve ",". ¡Eso no es todo! $ with other suffixes can mean many other things.

¿Por qué? Well, Perl of course!

+0

Gracias, esto era lo que estaba buscando, es decir, el uso de $ en la definición de separadores de campo entre muchas otras cosas. – user1175135

Cuestiones relacionadas