gpt4 book ai didi

ruby-on-rails - 什么是 MyApp::Application.initialize!打电话?

转载 作者:太空宇宙 更新时间:2023-11-03 16:31:17 24 4
gpt4 key购买 nike

我正在尝试弄清楚 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

那么为什么我们期望的是类方法却调用了实例方法呢?是否有方法委托(delegate)之类的技巧?

最佳答案

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

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

如果您不知道 method_missing 钩子(Hook),您可以在这里阅读更多相关信息:http://rubylearning.com/satishtalim/ruby_method_missing.html

关于ruby-on-rails - 什么是 MyApp::Application.initialize!打电话?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15387983/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com