2009-12-13 21 views
50

Ho giocato con Ruby on Rails per un po 'e ho deciso di dare un'occhiata alla fonte reale. Afferrato il repo da GitHub e ha iniziato a guardarsi intorno. Ho trovato un codice che non sono sicuro di cosa faccia o di cosa faccia riferimento.

Ho visto questo codice in 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' 

Qualcuno può dirmi quello che il $: (anche noto come "il bling") fa riferimento?

risposta

4

Per citare il rubino Ruby Forum:

è dotato di una serie di variabili predefinite

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

se ho capito bene (non al 100% sicuro) questo si aggiunge il percorso lib a questo array di percorsi di ricerca andando oltre il file corrente. che non è esattamente il miglior modo , avrei semplicemente iniziare con RAILS_ROOT (almeno per un progetto rotaie)

2
$:.unshift 

è uguale

$LOAD_PATH.unshift 

. Puoi anche dire:

$: << 
$LOAD_PATH << 

Sono degli idiomi Ruby piuttosto comuni per impostare un percorso di caricamento.

54

$ identifica una variabile globale, in contrasto con una variabile locale, una variabile @instance o una variabile di classe @@.

Tra le variabili globali lingua forniti sono $:, che è anche identificato da $LOAD_PATH

1

Voglio nota qualcosa di strano Rubino!

$ significa infatti percorso di carico. E ; significa "fine linea". Ma!

$; significa separatore di campo. Prova a eseguire $;.to_s nel tuo REPL e vedrai che restituisce ",". Non è tutto! $ with other suffixes can mean many other things.

Perché? Well, Perl of course!

+0

Grazie, questo era quello che stavo cercando, ad esempio l'uso di $ nel definire i separatori di campo tra molte altre cose. – user1175135