Заморозить массивы и хэши по умолчанию?

#ruby #constants #freeze

#ruby #константы #заморозить

Вопрос:

Просто интересно, если что-то вроде:

# frozen_string_literal: true

существует, но для массива и хэша?

Цель состоит в том, чтобы не .freeze использовать каждый из них в одном и том же файле globals.

Комментарии:

1. Еще стоит отметить, что если вы используете компоновщик кода, он может поддерживать функцию автоматической коррекции для устранения подобных проблем. Например, rubocop для этого есть правило , позволяющее автоматически корректировать файл с freeze каждой константой.

Ответ №1:

Я не нашел ни одной библиотеки, которая исправляла бы классы ruby по умолчанию, такие как Array или Hash . Но я нашел интересный неизменяемый драгоценный камень — 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"
 

Комментарии:

1. Это стоит рассмотреть. Я попробую, спасибо.

Ответ №2:

Найден способ справиться с этим без использования другого драгоценного камня, используя только vscode и rubocop :

  1. Установите расширение rubocop на vscode
  2. Откройте свой .vscode/settings.json
  3. Добавьте эти правила :
 {
  "editor.formatOnSave": true,
  "editor.formatOnSaveTimeout": 5000,
  "ruby.format": "rubocop"
}
 
  1. Сохранить
  2. наслаждайтесь

Спасибо Тому Лорду за подсказку.