Rails中的冻结枚举值是否会改变什么?

时间:2017-09-26 09:20:31

标签: ruby-on-rails rails-activerecord

是否值得在这样的Rails模型中冻结枚举值?

enum level: {beginner: 0, advanced: 1, expert: 2}.freeze
# or
enum level: [:beginner, :advanced, :expert].freeze

这些值在任何地方都不会改变。如果冻结它们,性能是否会改变?

1 个答案:

答案 0 :(得分:0)

  • 每当您创建 常量 时,您仍然可以在运行时更改它。
  • 使用 冻结 ,您可以创建一个实际的常量 不变。所以,当你试图修改冻结物品时,你会得到一个 RuntimeError。
  • 加速Ruby应用程序可以做的最好的事情之一就是 减少创建的对象数量。每次执行此操作 方法调用如 方法(" foobar") ,您正在创建一个新的String对象。这将对性能产生影响。
  • 如果我们冻结字符串文字,Ruby解释器只会创建 一个String对象并将其缓存以供将来使用。所以使用freeze 显然提高了性能