ruby - 无法修改冻结的字符串(TypeError)

Str*_*aff 58 ruby

拿到

...'[] =':无法修改冻结的字符串(TypeError)

当试图修改我认为是ARGV [0]的副本时.

每个人的结果相同

arg = ARGV[ 0 ]
arg_cloned = ARGV[ 0 ].clone
arg_to_s = ARGV[ 0 ].to_s

arg[ 'x' ] = 'y'
arg_cloned[ 'x' ] = 'y'
arg_to_s[ 'x' ] = 'y'
Run Code Online (Sandbox Code Playgroud)

Str*_*aff 106

因为谷歌花了太长时间才找到正确的答案......

需要做的

arg_dup = ARGV[ 0 ].dup
Run Code Online (Sandbox Code Playgroud)

  • 远远超过那个...做了很多谷歌搜索,花了很长时间才找到正确的结果.然后我发布了这个问题和答案,所以"堆叠"有它,现在很容易找到(因为我忘了).现在谷歌排名第一! (14认同)
  • 对.克隆复制对象的整个状态,包括冻结状态.Dup复制对象的肉而没有其他标志. (13认同)
  • 从发布您的问题64秒到搜索Google并因发布您的答案而感到烦恼太长了?:) (2认同)

Dir*_*tyF 5

由于Ruby 2.3推荐的方法是使用一元加运算符,如果冻结了字符串,它将返回重复的可变字符串。

+arg