gpt4 book ai didi

ruby-on-rails - 为什么 Rails 的 `HashWithIndifferentAccess` 将键存储为字符串而不是符号?

转载 作者:数据小太阳 更新时间:2023-10-29 08:22:05 24 4
gpt4 key购买 nike

我正在使用 enum 将我数据库中的整数映射到我的 ruby​​ 代码中的语义值,但是我注意到它使用的键是字符串。检查hash的类型时,发现是ActiveSupport::HashWithIndifferentAccess,不是标准的Hash,这倒是有道理,但问题是为什么Rails 选择在内部将值存储和比较为字符串,而不是符号。

documentation状态:

Internally symbols are mapped to strings when used as keys in the entire writing interface

符号通常用于散列中,因为它们可以进行快速比较,但 Rails 选择使用字符串来代替。他们为什么选择这样做,性能差异有多大?

最佳答案

Why have they chosen to do this

ActiveSupport::HashWithIndifferentAccess 主要用于处理来自外部的参数。符号存储在 ruby​​ 堆中,通常不会将它们释放回系统。

在从外部获取 key 的东西中使用符号作为 key ,会导致针对 OutOfMemory 攻击的漏洞([D]DoS,使用随机生成的参数名称发送查询.) 这就是选择字符串的原因,AFAIU。如需 100% 的保证,请咨询 DHH。

how significant is the difference in performance?

使用Benchmark去检查。此站点不应是“请为我做基准测试”的站点。

关于ruby-on-rails - 为什么 Rails 的 `HashWithIndifferentAccess` 将键存储为字符串而不是符号?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41592312/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com