应该使用类和全局变量的时间和原因?

时间:2011-07-03 22:49:44

标签: ruby-on-rails ruby ruby-on-rails-3 variables

我正在使用Ruby on Rails 3.0.7,我想知道何时以及为什么要使用class(@@)和全局($)变量以及this case这些都得到了适当的使用。

P.S。:我问的是这个问题,因为我有mentioned case-problem并在答案中建议使用类变量。我很感激你可以解释我,如果在那种情况下使用它是好的。

2 个答案:

答案 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