【问题标题】:When and why class and global variables should be used?何时以及为什么应该使用类和全局变量?
【发布时间】:2014-09-17 06:43:02
【问题描述】:

我正在使用 Ruby on Rails 3.0.7,我想知道何时以及为什么应该使用类 (@@) 和全局 ($) 变量,以及在 this case 中是否正确使用了这些变量。

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

【问题讨论】:

  • 请花点时间把这个问题变成一个独立的问题。你可以参考你原来的问题,但这应该是可以理解的,不用去其他地方。
  • @edgerunner - 我更新了问题,以便更“独立理解”。
  • 它仍然需要你的其他问题才有意义。请花点时间让这个问题独立存在。 (即,如果您的其他问题被删除,应该仍然可以理解)
  • @edgerunner - 我认为这是一个普遍的问题,基本上。稍后才提到一个特定的案例研究\示例,以便更好地了解它们在实践中的用法。无论如何,我很感激你的建议。

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


【解决方案1】:

简短的回答是:从不

我是 ruby​​ 新手,但我确实从其他语言中知道很多:全局变量从不线程安全。

同样,避免像瘟疫一样的单例模式,除非你只处理一个独特的线程。


编辑:

顺便说一句,在谷歌上搜索 ruby​​ 依赖注入表明 Ruby 不需要任何依赖注入。好吧,告诉你什么。确实如此。

因为总是假设它没有,所以有大量的宝石和图书馆,还有什么不在那里。他们基本上假设您只有一个线程和 IO 阻塞。如果他们不是从一开始就这样做,他们可能是线程安全的和非阻塞的。但目前,他们还没有。

如果他们这样做了,他们也会在事件驱动服务器上玩得更好。

就目前的情况而言,这是一团糟。

事件机器不是线程安全的。瘦和歌利亚不是同一个原因。机架异步基本上是猴子修补整个事情。乘客使用前叉,只有在安装带导轨的 REE/1.8.7 时才聪明。 Mongrel 是线程安全的,但 IO 阻塞。 Webrick 是单线程和 IO 阻塞的。名单还在继续。就是乱七八糟。

【讨论】:

    【解决方案2】:

    类变量可用于快速而简单的缓存形式。

    class Thing
      def expensiveCall
        unless @@expensiveResult
          @@expensiveResult = ['foo','bar','baz'] # or whatever
        end
        @@expensiveResult
      end
    end
    

    【讨论】:

      猜你喜欢
      • 2017-08-01
      • 1970-01-01
      • 2011-06-07
      • 2010-12-07
      • 1970-01-01
      • 1970-01-01
      • 2021-01-11
      • 2012-06-13
      • 2014-05-22
      相关资源
      最近更新 更多