冻结的字符串 – 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方法,因此您可以设置该值. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |