如何解决nil.to_s产生冻结的字符串?
我很好奇。下面的代码片段产生FrozenError
会令人惊讶吗?魔术注释# frozen_string_literal: true
不存在。
n = nil
s = n.to_s
s.force_encoding('UTF-8')
解决方法
它是在Ruby 2.7中添加的-在release notes中有明确记录。
Module#name
,true.to_s
,false.to_s
和nil.to_s
现在总是返回冻结的字符串。对于给定的对象,返回的String始终相同。 [实验] [Feature #16150]
链接的问题在更改后还有其他原因:
在用户调用
to_s
的大部分时间里,他们只是在寻找一个简单的字符串表示形式来显示或插值到另一个字符串中。在我的简要探索中,to_s
的结果很少直接突变。似乎,通过提供一种显式请求冻结字符串的方法,我们可以节省很多对象。 ... 当应用于许多常见的to_s调用时,这将大大减少字符串分配。
总而言之,它减少了对象分配,从而减少了垃圾回收的开销,从而提高了性能。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。