按理说,类变量在不同请求之间是共享的。但是我发现只有在 instance method 做的修改才符合我的预期。
也就是一个 instance 方法去修改类变量,然后另一个 instance 方法去读取这个类变量时是修改后的值。
但是如果在 class method 中修改类变量,在另一个 class method 中读取却还是旧的值。
这是为何?
怎么做可以使 class method 做的修改,另一个 class method 读取时也是修改后的值?
#6 楼 @blacktulip 测试代码 class HelloController @@flag = false def self.test1 @@flag = true p @@flag end
def self.test2 p @@flag end end
然后我在 rails c 中运行 HelloController.test1 打印是 true 然后我新开一个终端 tab rails c 之后 HelloController.test2 还是 false
这是为何?按理说不该是 true 了吗?
终端 A 和终端 B 是两个进程。
rails s 是一个进程。
你试试 rails s -p 3000
和 rails s -p 4000
,3000 和 4000 端口的两个网页是不是同一个值?
#14 楼 @Rei 我做了个新的实验,https://ruby-china.org/topics/24488,结果打印出的类变量的值一会有,一会没有。。。
#15 楼 @macknight 第一个方法的类变量是@@my_logger,第二个方法是@@ACCESS_TOKEN, @@JS_API_TICKET,突然多了两个变量,你在哪里赋值,其他地方有没有改过我都不知道啊。