2 楼的也是正解。 刚刚打开 ActionMailer 的源码看了,我自己也来回答一下吧。其实首先是在类作用域中利用了 methods_missing 这个幽灵方法,在 methods_missing new 了一次对象,再通过 new 的对象调用实例方法。 再次,发现 ActionMailer 跟 controller 的原理是一样的,不让我们自行管理类的实例化,只能通过类方法的方式调用,但其实这不是一个类方法。
最后感叹一句,ruby 太神奇了。