На жаль, неможливо належним чином збільшити / зменшити капіталізацію машини. Для того, щоб зрозуміти комп'ютер, йому потрібно занадто багато контекстної інформації.
Ось чому String
клас Рубі підтримує лише використання великих літер для символів ASCII, оскільки там принаймні дещо чітко визначені.
Що я маю на увазі під "контекстною інформацією"?
Наприклад, щоб i
правильно писати великі літери , потрібно знати, на якій мові знаходиться текст. Англійська мова, наприклад, має лише два i
s: I
велика літера без крапки та мала i
з крапкою. Але турецька має чотири i
с: капітал I
без крапки, капітал İ
з крапкою, малий ı
без крапки, малий i
з крапкою. Так, англійською 'i'.upcase # => 'I'
та турецькою мовами 'i'.upcase # => 'İ'
. Іншими словами: оскільки 'i'.upcase
можна повернути два різні результати, залежно від мови, очевидно неможливо правильно написати великі літери на великому літері, не знаючи його мови.
Але Рубі не знає мови, вона знає лише кодування. Тому неможливо правильно використовувати великі літери з вбудованою функціональністю Ruby.
Стає все гірше: навіть з знаючи мови, іноді неможливо зробити капіталізацію правильно. Наприклад, в німецькому мовою , 'Maße'.upcase # => 'MASSE'
( MASSE це множина від MASS сенс виміру ). Однак, 'Masse'.upcase # => 'MASSE'
(маючи на увазі масу ). Отже, що таке 'MASSE'.capitalize
? Іншими словами: правильне використання великих літер вимагає всебічного штучного інтелекту.
Таким чином, замість того , щоб іноді дати неправильну відповідь, Рубі вирішує іноді не дає відповіді на всі , тому не-ASCII символи просто ігноруються в downcase / Upcase / капіталізувати операції. (Що, звичайно, також читає неправильні результати, але принаймні це легко перевірити.)