我正在使用Ruby on Rails 3.0.7,我想知道何时以及为什么要使用class(@@
)和全局($
)变量以及this case这些都得到了适当的使用。
P.S。:我问的是这个问题,因为我有mentioned case-problem并在答案中建议使用类变量。我很感激你可以解释我,如果在那种情况下使用它是好的。
答案 0 :(得分:3)
简短的回答是: 从不 。
我是ruby的新手,但我从其他语言中了解到这一点:全局变量 从不 线程安全。
沿着同样的路线,避免像瘟疫一样的单身模式,除非你只处理一个独特的线程。
编辑:
另外,谷歌搜索ruby依赖注入表明Ruby不需要任何东西。好吧,告诉你什么。确实如此。
因为它总是假定它没有,所以有大量的宝石和图书馆以及那里没有的东西。他们基本上假设你只有一个线程和IO阻塞。如果他们从一开始就没有这样做,那么他们可能是线程安全的而且非阻塞的。但目前,他们不是。
如果他们这样做了,那么他们在使用事件驱动的服务器方面也会表现得更好。
就目前而言,这是一场血腥的混乱。
事件机器不是线程安全的。瘦和歌利亚并不是一样的。 Rack-async基本上是猴子修补整个事情。 Passenger使用fork,只有安装带有rails的REE / 1.8.7才会智能。 Mongrel是线程安全的但是IO阻塞。 Webrick是单线程和IO阻塞。名单还在继续。这太乱了。
答案 1 :(得分:0)
类变量可用于快速而肮脏的缓存形式。
class Thing
def expensiveCall
unless @@expensiveResult
@@expensiveResult = ['foo','bar','baz'] # or whatever
end
@@expensiveResult
end
end