sch*_*333 2 ruby-on-rails static-variables
我有一个关于Rails最佳实践的问题。在我的rails项目中,我有以下代码:
class MyController < ApplicationController
def some_method
@product = MyFabricatorClass.new.create_product
end
...
end
Run Code Online (Sandbox Code Playgroud)
MyFabricatorClass不依赖于某些状态,并且其行为是恒定的。我也在做很多C ++的工作,对我来说,总是实例化一个新的MyFabricatorClass对象似乎有点效率低下。在C ++项目中,我会适当地使用类似以下内容的东西:
class MyController < ApplicationController
@@my_fabricator = nil
def some_method
@@my_fabricator ||= MyFabricatorClass.new
@product = @@my_fabricator.create_product
end
...
end
Run Code Online (Sandbox Code Playgroud)
这种样式在Rails中也合法吗?典型的Rails方式是什么?
感谢您的任何建议...!
最好不要@@在ruby中使用类变量(以开头的变量)。看看为什么
这看起来像是一个奇怪的代码,但这是更常规的方式:
您设置一个“类”实例变量,而不是设置一个“类变量”。
class MyController < ApplicationController
@my_fabricator = nil
class << self
def some_method
@my_fabricator ||= MyFabricatorClass.new
@product = @my_fabricator.create_product
end
end
end
Run Code Online (Sandbox Code Playgroud)
关于class << self,请参阅此处
上面的代码与以下代码相同:
class MyController < ApplicationController
@my_fabricator = nil
def self.some_method
@my_fabricator ||= MyFabricatorClass.new
@product = @my_fabricator.create_product
end
end
Run Code Online (Sandbox Code Playgroud)
现在您可以执行以下操作:
MyController.some_method
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1087 次 |
| 最近记录: |