Ruby on rails 什么是;类型错误:can';t修改冻结字符串";什么意思?
我在使用Twitter gem并传入数组时遇到了这个错误 我的代码看起来很无辜——想知道是什么导致了这种情况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
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
(除非有理由需要冻结它们)。