modules mixin from another ruby require

ruby - mixin - ¿Se requiere File.expand_path(...,__FILE__) la mejor práctica?



ruby import class from another file (4)

¿Se require File.expand_path(..., __FILE__) la mejor manera de requerir otros archivos dentro de un proyecto?


A menos que modifique $LOAD_PATH , lo cual sería una buena idea si continúa cargando desde la misma estructura de directorios, está trabado haciéndolo de esa manera.

La forma en que me he tomado el hacerlo, para asegurar que las cosas sean lo más diferentes posibles, es esta:

require File.expand_path(File.join(*%w[ ... ]), File.dirname(__FILE__))

Es un poco detallado, pero da como resultado el camino más corto posible y la menor cantidad de sintaxis en la mayoría de los casos.

Un ejemplo más específico sería:

require File.expand_path(File.join(*%w[ .. lib example ]), File.dirname(__FILE__))

Puede combinar esto con una modificación de $LOAD_PATH para simplificar las cosas si está cargando muchos archivos y hacer esto:

$LOAD_PATH << File.expand_path(File.join(*%w[ .. lib ]), File.dirname(__FILE__)) require ''example''


En Ruby 1.8.x, donde no tiene require_relative en el núcleo, File.expand_path(...,__FILE__) no funcionará.

Supongamos que __FILE__ == "/home/yourname/foo.rb" . File.expand_path("bar.rb",__FILE__) da "/home/yourname/foo.rb/bar.rb .

Lo que quiere es File.expand_path("bar.rb",File.dirname(__FILE__)) que devuelve "/home/yourname/bar.rb"

También puede obtener require_relative de la gema backports .


En Ruby 1.9.2 + require_relative es probablemente la forma más correcta de hacerlo.

require fue cambiado para no incluir tu ''.'' directorio por razones de seguridad. require_relative fue agregado para proporcionar una solución de archivo local para módulos relativos a la ruta del script de llamada .

Puede buscar aquí en , particularmente en " ¿Qué es require_relative in Ruby? ", Y en las redes, y encontrar trucos de uso y los mensajes de por qué explican cómo surgió.