2

我正在做一个 Rails 应用程序,人们可以在其中进行测验。我有一个BrowserGame负责控制器逻辑(会话、重定向等)的模型。目前,这是我的#initialize方法:

class BrowserGame
  def initialize(controller)
    @controller = controller
  end
end

在控制器中我有一个方法

class GamesController < ApplicationController

  # actions

  private

  def browser_game
    BrowserGame.new(self)
  end
end

如您所见,我将整个控制器传递给BrowserGame#initialize(因此我可以使用会话和其他人进行操作)。这是一个好主意吗?由于控制器实例是一个大对象,是否有任何副作用?

4

2 回答 2

6

是的,可以将大对象作为方法参数传递。您没有将对象放在堆栈上,只是指向它的指针。至于副作用——你@controller从内部做的任何事情都BrowserGame可以通过对控制器的任何其他引用看到,但这可能是你已经期望的。

于 2012-08-18T09:07:02.233 回答
0

传递大对象没有问题。

正如 Darshan 所说,它只是一个指针。

如果您要分叉进程/线程或尝试创建延迟作业以在后台运行,则最好只传递可序列化对象。

于 2012-08-18T09:12:21.293 回答