我想在我的博客应用程序的environment.rb
中找到以下行的来源Blog::Application.initialize!
如果发现初始化!方法仅在源代码中的一个位置定义。
railties / LIB /轨道/ application.rb中
def initialize!(group=:default) #:nodoc:
raise "Application has been already initialized." if @initialized
然而,它是一种实例方法。
我在rails控制台做了一些实验:
Blog::Application.initialize! # => Application has been already initialized
Blog::Application.method(:initialize!) # => undefined method for Class
Blog::Application.instance_methods.include?(:initialize!) # => true
奇怪的是,当initialize!
在Application类上可以清楚地调用时,我们得到一个未定义的方法。请帮助理解此代码。
答案 0 :(得分:0)
这是由于一些Ruby Magic又名“Method Missing”:
Blog::Application.ancestors
=> [... Rails::Railtie::Configurable ...]
查看configurable.rb
:
module Rails
class Railtie
module Configurable
extend ActiveSupport::Concern
module ClassMethods
[...]
def method_missing(*args, &block)
instance.send(*args, &block)
end
end
end
end
end
它将所有调用委托给底层应用程序实例。