Dearest
3/26/2018 - 2:52 AM

以别名的方式替换HASH的key

以别名的方式替换HASH的key

class Hash
  # 以别名的方式替换hash的key
  def alias_with(*aliases)
    deep_dup.alias_with!(*aliases)
  end

  def alias_with!(*aliases)
    tap { |hash|
      Hash[*aliases].map { |old_name, new_name|
        (old_name.is_a?(Symbol) ? new_name.to_sym : new_name.to_s).tap { |name|
          hash.key?(old_name) && hash.update(name => hash.delete(old_name))
        }
      }
    }
  end
end