Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 什么是;类型错误:can';t修改冻结字符串";什么意思?_Ruby On Rails_Ruby_Rubygems - Fatal编程技术网

Ruby on rails 什么是;类型错误:can';t修改冻结字符串";什么意思?

Ruby on rails 什么是;类型错误:can';t修改冻结字符串";什么意思?,ruby-on-rails,ruby,rubygems,Ruby On Rails,Ruby,Rubygems,我在使用Twitter gem并传入数组时遇到了这个错误 我的代码看起来很无辜——想知道是什么导致了这种情况 def twitter_get_users(client, user_names=[]) copy=Array.new(user_names) users = client.users(user_names) end TypeError: can't modify frozen string from gems/twitter-1.0.0/lib/twit

我在使用Twitter gem并传入数组时遇到了这个错误

我的代码看起来很无辜——想知道是什么导致了这种情况

 def twitter_get_users(client, user_names=[])
    copy=Array.new(user_names)
    users = client.users(user_names)
  end

TypeError: can't modify frozen string
    from gems/twitter-1.0.0/lib/twitter/client/utils.rb:10:in `gsub!'
    from /gems/twitter-1.0.0/lib/twitter/client/utils.rb:10:in `clean_screen_name!'
    from /gems/twitter-1.0.0/lib/twitter/client/utils.rb:33:in `merge_users_into_options!'

试试这个,看看是否有帮助:

def twitter_get_users(client, user_names=[])
  client.users user_names.map(&:dup)
end

试试这个,看看是否有帮助:

def twitter_get_users(client, user_names=[])
  client.users user_names.map(&:dup)
end
Ruby允许您进行修改,以便它们不会发生变异。要么Twitter gem冻结了一个字符串,然后试图调用
gsub,或者您传入了一个已冻结的字符串

这个答案不能帮助您解决问题的根源,但它确实回答了“这意味着什么以及为什么会发生?”的问题。Ruby允许您这样做,这样它们就不会发生变异。要么Twitter gem冻结了一个字符串,然后试图调用
gsub,或者您传入了一个已冻结的字符串

这个答案不能帮助你解决问题的根源,但它确实回答了“这意味着什么,为什么会发生?”

  • 您是否尝试打开
    gems/twitter-1.0.0/lib/twitter/client/utils.rb
    并查看第10行?:-)
  • 如果您在其中找不到任何明显的内容,请在rails项目和gem目录(
    gems/twitter-1.0.0/
    )上尝试
    grep-r'.freeze'
  • 您是否尝试打开
    gems/twitter-1.0.0/lib/twitter/client/utils.rb
    并查看第10行?:-)
  • 如果您在其中找不到任何明显的内容,请在rails项目和gem目录(
    gems/twitter-1.0.0/
    )上尝试
    grep-r'.freeze'

  • 谢谢有趣的是,在最初创建字符串时,字符串是如何被冻结的。基本上,我复制了单个字符串,它成功了。=)谢谢有趣的是,在最初创建字符串时,字符串是如何被冻结的。基本上,我复制了单个字符串,它成功了。=)我以前尝试过这个方法,但没有效果,但是这个方法的等价物可以工作=>user_names.map{u|u.dup}=>因为其中的字符串被冻结了!)那很有趣。我根据你的评论更新了我的答案。我认为你传递的
    用户名
    数组有点滑稽。当字符串第一次添加到数组中时,也许您应该使用
    dup
    (除非您有理由需要冻结它们)。我以前尝试过这个方法,但没有成功,但是这个方法的等效方法有效=>user_names.map{| u | u.dup}=>因为其中的字符串已冻结!=)那很有趣。我根据你的评论更新了我的答案。我认为你传递的
    用户名
    数组有点滑稽。当字符串第一次添加到数组中时,可能应该使用
    dup
    (除非有理由需要冻结它们)。