Ruby 2.3加载方法不再返回加载的类 - 而是返回布尔值

时间:2016-11-01 22:44:21

标签: ruby-on-rails ruby ruby-on-rails-4 activesupport

我正在将一个项目从Ruby 1.8.7迁移到Ruby 2.3,并将其从2迁移到4.

我有这个代码在1.8.7

中工作
if (oRegKey.SetKeyValue(keyName, keysValue, keyName) == ERROR_SUCCESS)
{
    setKeyWorked = true;
}

我的示例文件abc.rb

class_list = []
original_mechanism = ActiveSupport::Dependencies.mechanism
ActiveSupport::Dependencies.mechanism = :load 
  begin
    class_list += load("/tmp/abc.rb")
  rescue Exception => e
    debug e.backtrace
  end
ActiveSupport::Dependencies.mechanism = original_mechanism 

在Ruby 1.8.7中,class_list是 [Abc,Def]

在Ruby 2.3中,class_list是 [true] - (我必须将行更改为' class_list<< load(" /tmp/abc.rb") ;)'使它给出这个输出)

你们中的任何人都知道如何让它以旧方式回归?我想要的只是最后加载的类的ClassNames。

1 个答案:

答案 0 :(得分:1)

这不是Ruby。 Ruby的load总是在1.8.7和2.3.1中返回true。但是,ActiveSupport load使用load_dependencyhttp://apidock.com/rails/v3.0.0/ActiveSupport/Dependencies/Loadable/load_dependency),它会返回文件中定义的新常量。

您可以尝试在此使用load_dependency代替load吗?