加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

冻结的字符串 – Ruby

发布时间:2020-12-17 04:00:26 所属栏目:百科 来源:网络整理
导读:我有这个代码: settings[:base_name].gsub! /[x00/:*?"|]/,'' 当我运行脚本时,它会抛出一个错误: gsub!': can't modify frozen String (RuntimeError) 我已将代码更改为: settings[:base_name] = settings[:base_name].gsub /[x00/:*?"|]
我有这个代码:

settings[:base_name].gsub! /[x00/:*?"<>|]/,''

当我运行脚本时,它会抛出一个错误:

gsub!': can't modify frozen String (RuntimeError)

我已将代码更改为:

settings[:base_name] = settings[:base_name].gsub /[x00/:*?"<>|]/,''

上面的代码有效,但我完全不喜欢,有没有办法正确使用gsub!在这种情况下?

解决方法

不.显然,提供字符串的API已将其冻结,这意味着修改它的任何方法都将失败.因为gsub!修改它被调用的字符串,冻结的对象不能使用gsub!.但是,包含冻结对象的变量仍可以设置为非冻结对象,这就是您的第二个代码段工作的原因.

API可能会冻结对象,因为它是所有实例共享的常量字符串,因此一个实例不应该破坏字符串.但它们确实定义了一个setter方法,因此您可以设置该值.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读