ruby - 卡住字符串 - Ruby

标签 ruby string

我有这个代码:

 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 方法,因此您可以设置值。

关于ruby - 卡住字符串 - Ruby,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12183530/

相关文章:

Ruby:如何将文件加载到交互式 Ruby 控制台 (IRB)?

python - 我如何从Python中的s[-4 :] to s[slice(? ??)] 进行翻译?不是“s[切片(s, len(s))]”

python - 以除空格以外的任何内容开头,以扩展名(.png、.jpg、.mp4、.avi、.flv)结尾

ruby-on-rails - 如何跨规范文件重用 Rspec let 表达式?

ruby - 为什么 Ruby 实例方法调用在以 'self' 为前缀时表现不同?

ruby - 计算哈希中最高的最大值 3 个值

java - 如何使用另一个类中一个类的 boolean 方法来检查字符串参数?

python - 在整个数据框中分离一个棘手的字符串

regex - r- 多重匹配中的部分匹配

ruby-on-rails - 在 Ruby/Rails 中合并数组