ruby-on-rails – 为什么相对路径在Ruby中不起作用

前端之家收集整理的这篇文章主要介绍了ruby-on-rails – 为什么相对路径在Ruby中不起作用前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我开始学习 Ruby,有一件事我不明白,为什么require指令的相对路径在ruby中不起作用.这是几乎在我现在的每个脚本语言(JSP,PHP …)中的工作.我用一个真实的例子解释.我有一个名为shape的文件夹,其中包含3类形状,矩形和正方形.我还有另一个文件test_shapes.rb从我调用和测试我的类.当我将类导入主文件时,如下所示:
require "./shape"
require "./rectangle"
require "./square"

我找不到文件错误.当我包含我的子文件夹的名称,如下所示:

require "./shapes/shape"
require "./shapes/rectangle"
require "./shapes/square"

代码是完美的工作.因为我指定了整个路径到项目的根目录(我认为的lib文件夹).当我包括包括硬盘的绝对路径,像这样:

require "#{File.dirname(__FILE__)}/shape"
require "#{File.dirname(__FILE__)}/rectangle"
require "#{File.dirname(__FILE__)}/square"

它也正常工作.

所以,我只想要一些解释,如果知道为什么第一个导入方法(当前文件夹的相对路径)不工作.

解决方法

相对路径是基于工作目录.我假设主文件位于同一目录下.如果在项目根目录下运行ruby ./shapes/main.rb,那么ruby会尝试找到{project_root} /shape.rb,而不是{project_root} /shapes/shape.rb.它不工作

你需要使用require_relative,如下所示.

# {project_root}/shapes/main.rb
require_relative './shape'
require_relative './rectangle'
require_relative './square'

猜你在找的Ruby相关文章