Метод загрузки Ruby 2.3 больше не возвращает загруженные классы — вместо этого возвращает логическое значение

Я переношу проект с Ruby 1.8.7 на Ruby 2.3 и рельсы с 2 на 4.

У меня есть этот код, который работал в 1.8.7

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 

мой образец файла abc.rb

class Abc
  def ...
end
class Def
...
end

В Ruby 1.8.7 class_list равен [Abc,Def].

В Ruby 2.3 class_list равен [true] — (мне пришлось изменить строку на 'class_list ‹‹ load("/tmp/abc.rb")', чтобы она выдавала этот вывод)

Кто-нибудь из вас знает, как заставить его вернуться по-старому? Все, что мне нужно, это ClassNames классов, загруженных в конце.


person JmG    schedule 01.11.2016    source источник


Ответы (1)


Это не Руби. Ruby load всегда возвращал true, как в 1.8.7, так и в 2.3.1. Однако есть ActiveSupport load, который использует load_dependency (http://apidock.com/rails/v3.0.0/ActiveSupport/Dependencies/Loadable/load_dependency), который возвращает новые константы, определенные в файле.

Можете ли вы попробовать использовать load_dependency вместо load здесь?

person Murad Yusufov    schedule 02.11.2016