可以在方法参数中传递大对象吗?

时间:2012-08-18 08:55:43

标签: ruby-on-rails ruby

我正在做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(因此我可以使用会话和其他人操作)。这是一个好主意吗?是否有任何副作用,因为控制器实例是一个大对象?

2 个答案:

答案 0 :(得分:6)

是的,将大对象作为方法参数传递是可以的。您不是将对象放在堆栈上,只是指向它的指针。就副作用而言 - 你在@controller内对BrowserGame做的任何事情都可以通过对控制器的任何其他引用看到,但这可能是你所期望的。

答案 1 :(得分:0)

传递大型物体没有问题。

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

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