Ce n' __FICHIER__ moyenne en Ruby?
Je vois cela tout le temps en Ruby:
require File.dirname(__FILE__) + "/../../config/environment"
Ce n' __FILE__
veux dire?
- Pour aider à lier ensemble des références, voir aussi ruby-forum.com/topic/143383 et stackoverflow.com/questions/4325759/...
Vous devez vous connecter pour publier un commentaire.
C'est une référence à l'actuel nom de fichier. Dans le fichier
foo.rb
,__FILE__
serait interprété comme"foo.rb"
.Edit: Ruby 1.9.2 1.9.3 et semblent se comporter un peu différemment de ce que Luc Bayes dit dans son commentaire. Avec ces fichiers:
De course
ruby test.rb
sortie`__FILE__`
pour obtenir__FILE__
.`__FILE__`
en ruby, sauf si vous voulez le monde, peut-être à exploser.La valeur de
__FILE__
est un chemin d'accès relatif est créé et stocké (mais jamais mis à jour) une fois que votre fichier est chargé. Cela signifie que si vous avez des appels àDir.chdir
n'importe où ailleurs dans votre application, ce chemin vous développez de manière incorrecte.Une solution de contournement pour ce problème consiste à stocker l'élargissement de la valeur de
__FILE__
en dehors de tout code de l'application. Tant que votrerequire
états sont en haut de votre définitions (ou, au moins, avant tout appel àDir.chdir
), cette valeur va continuer à être utile après un changement de répertoires.This means that if you have any calls to Dir.chdir anywhere else in your application, this path will expand incorrectly.
Le chemin d'accès élargi correctement sous mon test. Ma version de ruby est 2.3.7, peut-être la plus récente version de ruby résolu ce problème.__FILE__
est le nom de fichier avec l'extension du fichier contenant le code en cours d'exécution.Dans
foo.rb
,__FILE__
serait "foo.rb".Si
foo.rb
étaient dans la dir/home/josh
puisFile.dirname(__FILE__)
serait de retour/home/josh
.En Ruby, la version Windows de toute façon, je viens de vérifier et
__FILE__
ne contient pas le chemin complet vers le fichier. Au lieu de cela, il contient le chemin du fichier par rapport à l'endroit où il est exécuté à partir d'.En PHP
__FILE__
est le chemin d'accès complet (qui à mon avis est préférable). C'est pourquoi, afin de rendre votre chemins de portable en Ruby, vous avez vraiment besoin d'utiliser cette:J'convient de noter qu'en Ruby 1.9.1
__FILE__
contient le chemin complet du fichier, la description ci-dessus a été lorsque j'ai utilisé Ruby 1.8.7.Afin d'être compatible à la fois avec Ruby 1.8.7 et 1.9.1 (pas sûr d'environ 1,9), vous devez exiger des fichiers à l'aide de la construction, j'ai montré ci-dessus.
File.expand_path(File.dirname(__FILE__) + "/relative/path/to/file")
File.expand_path( File.join( File.dirname(__FILE__), "relative", "path", "to", "file") )