仅分配给关键字“new”的 Ruby 变量

wor*_*orc 3 ruby ruby-on-rails

这很难搜索,但我在类方法中有一行 Ruby,其中首先通过为变量分配一个裸new关键字来声明变量,我不确定这里发生了什么:

  def self.html_render_controller(post)
    controller = new
    controller.action = 'show'
    controller.post = post
    controller.render_to_string
  end
Run Code Online (Sandbox Code Playgroud)

来自其他语言,在我看来像是controller被隐式初始化为某种对象。并且render_to_string是内置的 Rails,所以我最好的猜测是controller被初始化为某种 Rails 对象?

我想我的问题真的是在controller第一次分配之后的价值是什么?或者什么样的执行规则甚至只是 Ruby 中的文档会为我指明正确的方向来理解这种速记?

小智 5

它不像 ruby​​ 代码那么奇怪。这是相当直接的。

new不是关键字是对隐式调用的方法self。在 Ruby 中调用方法不需要括号。

如果你调用一个方法,无需在Ruby中明确的接收器,接收器将是self,该方法的身体里面self.html_render_controllerself引用已被定义方法的类。

因此new,在方法内部执行self.html_render_controller只返回定义该方法的类的新对象。

您可以new从 上的文档中 获得更多详细信息Class,即 Ruby 中任何类的类,作为类只是类的对象Class