是否存在一种叫做proc的方法,就像符号一样触发proc

时间:2012-06-01 17:11:17

标签: ruby-on-rails ruby

> %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] 

1 个答案:

答案 0 :(得分:2)

method#to_proc返回一些内容,当您在其上调用call时,该方法会传递提供的参数。例如

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

输出你好世界。该方法“记住”它来自哪里,在这种情况下是你的脚本的顶级对象。像putsrequire这样的方法是在Object上定义的(通过内核),所以方法绑定的对象并不重要(假设当然该类没有定义自己的require方法) !)

所以%w(action_controller/railtie action_mailer/railtie).map &method(:require)等同于调用require一次传递一个字符串并收集返回值(恰好是true) - 不要过多关注返回值需要。

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