> %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]
答案 0 :(得分: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
) - 不要过多关注返回值需要。
这不是一个东西 - 你可以在一个vanilla irb会话中用任何可用的文件做同样的事情。我不是我会这样做 - 这让我觉得选择“可爱”而不是“可以理解”。