Ruby 诡异的 uninitialized constant 错误

dongli1985 · 2015年01月09日 · 最后由 dongli1985 回复于 2015年01月10日 · 2846 次阅读

我有个程序在很多台电脑上都运行没有问题,但是在一个Ubuntu 11.10,Ruby 2.1.3p242 (2014-09-19 revision 47630) [x86_64-linux]环境下运行时出现:

/tp914/zy/packman/packages/wrf_wps.rb:33:in `install': uninitialized constant Wrf_wps::Jasper (NameError)

下面是问题脚本的片段:

class Wrf_wps < PACKMAN::Package
  url 'http://www2.mmm.ucar.edu/wrf/src/WPSV3.6.1.TAR.gz'
  sha1 'f6ef8b25593d4d5711e7d6853db4965e60969b88'
  version '3.6.1'
  ...
  def install
    PACKMAN.append_env "NETCDF='#{PACKMAN.prefix Netcdf}'", :ignore
    includes = []
    libs = []
    includes << "#{PACKMAN.prefix Jasper}/include" # 出问题的地方
    ...
  end
  ...
end

问题是:为什么 Ruby 会悄悄给 Jasper 前面加上一个前缀Wrf_wps::呢?

ruby 会优先在 module nesting 中查找常量,若找不到,再去 ancestor 中去找。

@xiaoronglv 谢谢回复!这个问题出现的情况很特殊,有点难 debug,我再检查检查。

需要 登录 后方可回复, 如果你还没有账号请 注册新账号