string.chars.length против string.length - PullRequest
8 голосов
/ 27 апреля 2011

Я перехожу с Rails 2.1.2 на 2.3.5, и один из пунктов, который больше не работает, -

"string".chars.length

Я использовал консоль, чтобы обнаружить, что «string» .chars является методом ActiveSupport в 2.1.2 и Enumerable в 2.3.5

Итак, при завершении этой миграции мне было интересно, в чем разница при использовании

"string".chars.length

против

"string".length

Вернут ли они то же самое? Похоже, я просто хотел узнать, знаете ли вы разницу, чтобы я мог учиться?

Спасибо

1 Ответ

12 голосов
/ 27 апреля 2011

Если вы использовали метод #chars, потому что имели дело со строками Unicode, тогда вы можете использовать #mb_chars, и это, вероятно, ваш лучший выбор, чтобы гарантировать, что ваш код работает точно так же, как в 2.1.2:

"string".mb_chars.length
=> 6

Однако, если вы используете Ruby 1.9 или используете Ruby 1.8, но вам не нужно иметь дело со строками Юникода, вы можете просто использовать "string".length.(В Ruby 1.9 #mbchars в любом случае просто возвращает self, поскольку 1.9 значительно лучше поддерживает строки Юникода.)

См. документацию API для получения дополнительной информации.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...