ActiveSupport :: Dependencies#load()覆盖`load`属性

时间:2013-10-28 15:15:54

标签: ruby-on-rails ruby

......也以一种奇怪的一致方式。

我有一些load属性的模型。当我弹出一个控制台会话或reload! Universe时,我始终在任何ArgumentError电话上看到相同的load,直到我拨打 其他任何内容 在具有load属性的任何其他模型实例上:

Work.new.load
# => ArgumentError: wrong number of arguments (0 for 1..2)
# from gems/activesupport-4.0.0/lib/active_support/dependencies.rb:220:in `load'
Butt.new.load
# => ArgumentError: wrong number of arguments (0 for 1..2)
# from gems/activesupport-4.0.0/lib/active_support/dependencies.rb:220:in `load'
Work.new.class  # or even Work.new.nonexistant_method
# => Work
Work.new.load
# => nil
Butt.new.load
# => nil

我用这个荒谬的黑客解决了这个问题:

after_initialize :fix_load_nonsense
def fix_load_nonsense; end

1 个答案:

答案 0 :(得分:0)

#load是Ruby' Kernel Module的一种方法。由于类Kernel包含Object,因此每个Ruby对象都可以使用#load方法。覆盖它有潜在危险,因此不应将#load用作属性的名称。

我认为关于ArgumentError的问题发生在干净的内存空间中是由于开发控制台的自动加载行为。