К сожалению, для машины невозможно правильно прописать / уменьшить регистр / использовать заглавные буквы.Ему нужно слишком много контекстной информации, чтобы компьютер мог ее понять.
Именно поэтому класс String
в Ruby поддерживает только заглавные буквы для символов ASCII, потому что по крайней мере несколько четко определено.
Что я подразумеваю под «контекстной информацией»?
Например, чтобы правильно использовать заглавную букву i
, вам необходимо знать, на каком языке находится текст. Например, в английском есть только дваi
s: заглавная I
без точки и маленькая i
с точкой.Но у турецкого есть четыре i
s: прописная I
без точки, прописная İ
с точкой, маленькая ı
без точки, маленькая i
с точкой.Итак, на английском 'i'.upcase # => 'I'
и на турецком 'i'.upcase # => 'İ'
.Другими словами: поскольку 'i'.upcase
может возвращать два разных результата, в зависимости от языка, очевидно, невозможно правильно использовать заглавную букву в слове, не зная его языка.
Но Руби не знает языка, он толькознает кодировкуПоэтому невозможно правильно использовать заглавную строку с помощью встроенной функциональности Ruby.
Становится хуже: даже при , зная язык, иногда невозможно сделать заглавные буквы правильно.Например, на немецком языке 'Maße'.upcase # => 'MASSE'
( Maße - это множественное число от Maß , что означает измерение ).Однако 'Masse'.upcase # => 'MASSE'
(имеется в виду масса ).Итак, что такое 'MASSE'.capitalize
?Другими словами: для правильного использования заглавных букв необходим полноценный искусственный интеллект.
Таким образом, вместо того, чтобы иногда давать неправильный ответ, Руби предпочитает иногда вообще не давать ответа , поэтомуСимволы -ASCII просто игнорируются в операциях downcase / upcase / capitalize.(Что, конечно, также приводит к неверным результатам, но, по крайней мере, это легко проверить.)