2

我试图弄清楚 rails 3 的初始化。而且我知道每个应用程序都会调用 environment.rb 中的以下函数来初始化整个应用程序:

MyApp::Application.initialize!

从它我们应该期待初始化!是 Rails::Application 的类方法。但是在我红了源代码之后,我发现改为初始化!是一个实际调用的实例方法:

def initialize!(group=:default) #:nodoc:
  raise "Application has been already initialized." if @initialized
  run_initializers(group, self)
  @initialized = true
  self
end

那么为什么要调用实例方法,尽管我们期望一个类方法呢?有像方法委托这样的技巧吗?

4

1 回答 1

1

是的。代表团有一个小技巧。如果您查看 gem 中的文件lib/rails/railtie/configurable.rbrailties您将看到以下委托给实例的代码。

def method_missing(*args, &block)
  instance.send(*args, &block)
end

如果您不知道 method_missing 钩子,您可以在此处阅读更多信息:http ://rubylearning.com/satishtalim/ruby_method_missing.html

于 2013-03-13T16:35:58.910 回答