ruby 要求疑难解答
Posted
技术标签:
【中文标题】ruby 要求疑难解答【英文标题】:Troublesoot ruby require 【发布时间】:2012-11-16 14:57:21 【问题描述】:Ruby 要求仅适用于我的 gem,不适用于我编写的代码。我不确定我做错了什么。
这行得通
require "test-unit"
require "require "C:\\Users\\zreichert\\workspace\\FalconQA\\PageObjects\\Users\\user.rb"
这不起作用
require "Users/user"
require "Users\user"
require "Users/user.rb"
require "Users\user.rb"
require_relative "Users/user"
require_relative "Users\user"
require_relative "Users/user.rb"
require_relative "Users\user.rb"
我正在运行的脚本位于 - C:/Users/zreichert/workspace/FalconQA/testCases
我曾尝试像这样在 require 之前更改目录
Dir.chdir "C:/Users/zreichert/workspace/FalconQA/testCases"
所有错误看起来都像这样
c:/Ruby193/lib/ruby/site_ruby/1.9.1/rubygems/custom_require.rb:36:in require': cannot load such file -- Users/user (LoadError)
from c:/Ruby193/lib/ruby/site_ruby/1.9.1/rubygems/custom_require.rb:36:in
require'
来自 C:/Users/zreichert/workspace/FalconQA/testCases/FAL001.rb:14:in `
【问题讨论】:
试试require "./Users/user"
@slivu 谢谢你的工作,请转换为答案,以便我接受。
任何看起来像 "Users\user"
的东西都会失败,因为转义字符在双引号字符串中的解释方式。
【参考方案1】:
你可以试试
require "./Users/user"
【讨论】:
【参考方案2】:你可以用这个:
require_relative '../PageObjects/Users/user.rb'
斜杠优于两个反斜杠,因为它适用于 Windows 和 Linux/MacOS。
【讨论】:
【参考方案3】:只是稍微扩展Roozbeh 的答案,require_relative
允许您加载相对于包含require_relative
的文件的位置的文件,因此执行chdir
不会对此产生任何影响。
从你在问题中所说的来看,从 FAL001.rb 到 user.rb 的相对路径是
../PageObjects/Users/user.rb
即上一层,然后下到 PageObjects/Users,因此
require_relative '../PageObjects/Users/user.rb'
【讨论】:
这对我来说完全有意义,但是当我尝试这个时,我得到:C:/Users/zreichert/workspace/FalconQA/testCases/FAL001.rb:4:inrequire_relative': cannot load such file -- C:/Users/zreichert/workspace/FalconQA/testCases/Users/userdata.rb (LoadError) from C:/Users/zreichert/workspace/FalconQA/testCases/FAL001.rb:4:in
作为心理安全提示,任何看起来像 "Users\user"
的东西都会失败,因为转义字符在双引号字符串中的解释方式。
相反,为您的 require
参数使用单引号以保持您的理智:
require 'foo'
或
require './relative/path/to/foo'
require '../relative/path/to/bar'
【讨论】:
以上是关于ruby 要求疑难解答的主要内容,如果未能解决你的问题,请参考以下文章
ruby 疑难点之—— yield 和 yield self