2010-12-07 58 views
0

我在使用Twitter gem和傳入數組時遇到了此錯誤。「TypeError:不能修改凍結字符串」是什麼意思?

我的代碼看起來很無辜 - 想知道是什麼導致了這個?

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!' 

回答

2

紅寶石讓你freeze objects,使他們不被突變。 Twitter的寶石凍結了一個字符串,然後試圖打電話給gsub!,或者你傳遞了一個已經凍結的字符串。

這個答案不能幫助你解決問題的根源,但它確實回答了「這是什麼意思,爲什麼會發生?」的問題。

3

試試這個,看看是否有幫助:

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

我以前嘗試這樣做,並沒有工作,但相當於這工作=> user_names.map {| u | u.dup} =>因爲它們中的字符串被凍結了! =) – 2010-12-09 04:16:21

+0

這很有趣。我根據你的評論更新了我的答案。我認爲,雖然你正在傳遞的'user_names`數組有趣的事情發生。也許你應該在第一次將字符串添加到數組時使用`dup`(除非有理由需要凍結它們)。 – bowsersenior 2010-12-09 06:54:30

1
  1. 您是否試圖打開gems/twitter-1.0.0/lib/twitter/client/utils.rb並查看第10行? :-)
  2. ,如果你不能找到任何東西在裏面明顯,嘗試grep -r '.freeze'你的Rails項目和創業板的目錄(gems/twitter-1.0.0/
相關問題