假设我的Rails应用程序中有一个Foo类。
class Foo
@@bar = "hello"
def self.change
@@bar = "goodbye"
end
def self.get_bar
@@bar
end
end
如果在某些时候,某些用户执行包含
的控制器操作Foo.change
Foo.get_bar会在每个用户会话中返回“goodbye”,直到服务器重新启动?
答案 0 :(得分:1)
在开发环境中,每个请求都会重新加载类,因此您会在每个请求中看到类变量重置。
在生产环境中,每个请求都没有 重新加载类,因此通常应该在给定Ruby进程中的请求之间保留类变量。
请记住,某些Rails服务器可能实际上有多个进程,因此无法保证所有用户和所有请求都将共享类变量。
其他Rails服务器可能是多线程的,因此您必须特别注意如何改变共享状态(例如类变量)。
由于这些原因,避免像@ andrew21所提到的那样使用类变量可能是个好主意。
答案 1 :(得分:0)
是的,@@是类变量,除了类变量不是线程安全的,因此多线程系统将对此做出不一致的响应。一般经验法则:不要使用类变量。