0
> %w(action_controller/railtie action_mailer/railtie).map &method(:require)
 => [true, true] 

并且方法调用返回一个Method的实例。

> method(:require)
 => #<Method: Object(Kernel)#require> 

所以方法中必须有一个 to_proc 定义,它应该类似于

class Method
  def to_proc
    proc { |obj| self.send(obj) }
  end
end

我的问题是 rails 在 Method 中是否覆盖了这个 to_proc 或者什么。

为什么以下命令的行为方式与其行为方式相同

> %w(action_controller/railtie action_mailer/railtie).map &method(:require)
 => [true, true] 
4

1 回答 1

2

method#to_proc返回一些东西,当你调用call它时,方法,传递提供的参数。例如

method(:puts).call("hello world")

输出你好世界。该方法“记住”它的来源,在这种情况下,您的脚本的顶级对象。puts, 之类的方法require是在 Object 上定义的(通过内核),因此该方法绑定到什么对象并不重要(当然假设该类没有定义自己的 require 方法!)

所以%w(action_controller/railtie action_mailer/railtie).map &method(:require)相当于调用 require 一次传入这些字符串并收集返回值(恰好是true- 不要太注意 require 的返回值。

这不是 Rails 的事情——你可以在 vanilla irb 会话中使用任何可用的文件做同样的事情。我不是我会这样做——这让我觉得选择“可爱”而不是“可以理解”。

于 2012-06-01T18:00:21.133 回答