ventajas tutorial sirve rails que para documentacion desventajas descargar ruby

tutorial - ¿Qué significa__FILE__ en Ruby?



ruby wikipedia (4)

El valor de __FILE__ es una ruta relativa que se crea y almacena (pero nunca se actualiza) cuando se carga su archivo. Esto significa que si tiene alguna llamada a Dir.chdir cualquier otro lugar de su aplicación, esta ruta se expandirá incorrectamente.

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

Una solución a este problema es almacenar el valor expandido de __FILE__ fuera de cualquier código de aplicación. Siempre que sus declaraciones de require estén en la parte superior de sus definiciones (o al menos antes de cualquier llamada a Dir.chdir ), este valor seguirá siendo útil después de cambiar los directorios.

$MY_FILE_PATH = File.expand_path(File.dirname(__FILE__)) # open class and do some stuff that changes directory puts $MY_FILE_PATH

Veo esto todo el tiempo en Ruby:

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

¿Qué significa __FILE__ ?


En Ruby, la versión de Windows de todos modos, acabo de __FILE__ y __FILE__ no contiene la ruta completa al archivo. En su lugar, contiene la ruta al archivo en relación con el lugar desde donde se ejecuta.

En PHP __FILE__ es la ruta completa (que en mi opinión es preferible). Esta es la razón por la cual, para hacer que tus rutas sean portátiles en Ruby, realmente necesitas usar esto:

File.expand_path(File.dirname(__FILE__) + "relative/path/to/file")

Debo tener en cuenta que en Ruby 1.9.1 __FILE__ contiene la ruta completa al archivo, la descripción anterior fue para cuando usé Ruby 1.8.7.

Para ser compatible con Ruby 1.8.7 y 1.9.1 (no estoy seguro de la versión 1.9) deberías requerir archivos utilizando el constructo que mostré anteriormente.


Es una referencia al nombre del archivo actual. En el archivo foo.rb , __FILE__ se interpretaría como "foo.rb" .

Edición: Ruby 1.9.2 y 1.9.3 parecen comportarse de manera un poco diferente a lo que dijo Luke Bayes en su comentario . Con estos archivos:

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

# dir2/test.rb puts __FILE__

Ejecutando ruby test.rb saldrá

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


__FILE__ es el nombre de archivo con la extensión del archivo que contiene el código que se está ejecutando.

En foo.rb , __FILE__ sería "foo.rb".

Si foo.rb estuviera en el directorio /home/josh entonces File.dirname(__FILE__) devolvería /home/josh .