traduzione - ruby tutorial




Cosa significa__FILE__ in Ruby? (3)

Lo vedo sempre in Ruby:

require File.dirname(__FILE__) + "/../../config/environment"  

Cosa significa __FILE__ ?


È un riferimento al nome del file corrente. Nel file foo.rb , __FILE__ sarebbe interpretato come "foo.rb" .

Modifica: Ruby 1.9.2 e 1.9.3 sembrano comportarsi in modo leggermente diverso da quello che Luke Bayes ha detto nel suo commento . Con questi file:

# test.rb
puts __FILE__
require './dir2/test.rb'
# dir2/test.rb
puts __FILE__

ruby test.rb in uscita

test.rb
/full/path/to/dir2/test.rb

Il valore di __FILE__ è un percorso relativo che viene creato e memorizzato (ma mai aggiornato) quando viene caricato il file. Ciò significa che se hai qualche chiamata a Dir.chdir qualsiasi altro punto della tua applicazione, questo percorso si espanderà in modo errato.

puts __FILE__
Dir.chdir '../../'
puts __FILE__

Una soluzione a questo problema è di memorizzare il valore espanso di __FILE__ al di fuori di qualsiasi codice di applicazione. Finché le tue istruzioni require sono in cima alle tue definizioni (o almeno prima di ogni chiamata a Dir.chdir ), questo valore continuerà ad essere utile dopo aver cambiato directory.

$MY_FILE_PATH = File.expand_path(File.dirname(__FILE__))

# open class and do some stuff that changes directory

puts $MY_FILE_PATH

__FILE__ è il nome file con estensione del file contenente il codice in esecuzione.

In foo.rb , __FILE__ sarebbe "foo.rb".

Se foo.rb fosse in dir /home/josh File.dirname(__FILE__) restituirebbe /home/josh .





ruby