我开始学习
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'