【问题标题】:Freeze arrays and hashes by default?默认情况下冻结数组和哈希?
【发布时间】:2021-01-19 13:29:24
【问题描述】:

只是想知道是否类似:

# frozen_string_literal: true

存在但对于数组和哈希?

目标是不必.freeze 同一全局文件中的每一个。

【问题讨论】:

  • 另外值得注意的是,如果您使用代码 linter,它可能支持 自动更正 功能来解决此类问题。例如,rubocop has a rule for this,因此自动更正文件,并自动使用 freeze 每个常量。

标签: ruby constants freeze


【解决方案1】:

我没有找到任何可以修补默认 ruby​​ 类的库,例如 ArrayHash。但我发现了一个有趣的 gem immutable-ruby 可能适合您的需求

简单示例

require "immutable/hash"

person = Immutable::Hash[name: "Simon", gender: :male]
# => Immutable::Hash[:name => "Simon", :gender => :male]

你不能只修改它的值,因为它是不可变的。您可以对该哈希执行一些操作,但新副本将返回给您

friend = person.put(:name, "James") # => Immutable::Hash[:name => "James", :gender => :male]
person                              # => Immutable::Hash[:name => "Simon", :gender => :male]
friend[:name]                       # => "James"
person[:name]                       # => "Simon"

【讨论】:

  • 这值得考虑。我试试看谢谢。
【解决方案2】:

找到了一种方法来处理它,而无需使用仅使用 vscode 和 rubocop 的其他 gem:

  1. 在 vscode 上安装 rubocop 扩展
  2. 打开您的.vscode/settings.json
  3. 附加这些规则:
{
  "editor.formatOnSave": true,
  "editor.formatOnSaveTimeout": 5000,
  "ruby.format": "rubocop"
}
  1. 保存
  2. 享受

感谢 Tom Lord 的提示。

【讨论】:

    猜你喜欢
    • 2017-03-03
    • 2015-10-06
    • 1970-01-01
    • 2014-01-31
    • 1970-01-01
    • 1970-01-01
    • 2012-02-29
    • 2010-12-02
    • 2012-11-24
    相关资源
    最近更新 更多