На жаль, неможливо належним чином збільшити / зменшити капіталізацію машини. Для того, щоб зрозуміти комп'ютер, йому потрібно занадто багато контекстної інформації.
Ось чому Stringклас Рубі підтримує лише використання великих літер для символів ASCII, оскільки там принаймні дещо чітко визначені.
Що я маю на увазі під "контекстною інформацією"?
Наприклад, щоб iправильно писати великі літери , потрібно знати, на якій мові знаходиться текст. Англійська мова, наприклад, має лише два is: 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 / капіталізувати операції. (Що, звичайно, також читає неправильні результати, але принаймні це легко перевірити.)