Что означает «Ошибка типа: невозможно изменить замороженную строку»? - PullRequest
0 голосов
/ 08 декабря 2010

Я получил эту ошибку при использовании драгоценного камня Twitter и передаче массива.

Мой код выглядит достаточно невинно - интересно, что вызывает это?

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

Ответы [ 3 ]

3 голосов
/ 08 декабря 2010

Попробуйте и посмотрите, поможет ли это:

def twitter_get_users(client, user_names=[])
  client.users user_names.map(&:dup)
end
2 голосов
/ 08 декабря 2010

Ruby позволяет заморозить объекты , чтобы они не могли быть видоизменены. Либо камень Твиттера заморозил строку, а затем попытался вызвать gsub!, либо вы передали уже замороженную строку.

Этот ответ не поможет вам решить корень вашей проблемы, но он отвечает на вопросы «Что это значит и почему это происходит?»

1 голос
/ 08 декабря 2010
  1. Вы пытались открыть gems/twitter-1.0.0/lib/twitter/client/utils.rb и посмотреть на строку 10?: -)
  2. если вы не можете найти там ничего очевидного, попробуйте grep -r '.freeze' в вашем проекте rails и в каталоге этого драгоценного камня (gems/twitter-1.0.0/)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...