Thật không may, máy móc không thể viết hoa / viết hoa / viết hoa đúng cách. Nó cần quá nhiều thông tin theo ngữ cảnh để máy tính có thể hiểu được.
Đó là lý do tại sao Ruby String
lớp chỉ hỗ trợ vốn cho các ký tự ASCII, vì nó ít nhất phần nào được xác định rõ.
"Thông tin theo ngữ cảnh" nghĩa là gì?
Ví dụ, để viết hoa i
đúng, bạn cần biết văn bản đó bằng ngôn ngữ nào. Ví dụ, tiếng Anh chỉ có hai i
s: capital I
không có dấu chấm và nhỏ i
có dấu chấm. Nhưng Thổ Nhĩ Kỳ có bốn i
s: thủ đô I
không có dấu chấm, thủ đô İ
có dấu chấm, nhỏ ı
không có dấu chấm, nhỏ i
có dấu chấm. Vì vậy, bằng tiếng Anh 'i'.upcase # => 'I'
và tiếng Thổ Nhĩ Kỳ 'i'.upcase # => 'İ'
. Nói cách khác: vì 'i'.upcase
có thể trả về hai kết quả khác nhau, tùy thuộc vào ngôn ngữ, rõ ràng không thể viết hoa một từ chính xác mà không biết ngôn ngữ của nó.
Nhưng Ruby không biết ngôn ngữ, nó chỉ biết mã hóa. Do đó, không thể viết hoa đúng chuỗi có chức năng tích hợp của Ruby.
Nó trở nên tệ hơn: ngay cả với biết ngôn ngữ, nó là đôi khi không thể làm vốn hóa đúng cách. Ví dụ, trong tiếng Đức, 'Maße'.upcase # => 'MASSE'
( Maße là số nhiều của phép đo nghĩa Maß ). Tuy nhiên, (có nghĩa là khối lượng ). Vậy, là gì? Nói cách khác: viết hoa chính xác đòi hỏi Trí tuệ nhân tạo toàn diện.'Masse'.upcase # => 'MASSE'
'MASSE'.capitalize
Vì vậy, thay vì đôi khi đưa ra câu trả lời sai, Ruby chọn đôi khi không đưa ra câu trả lời nào cả , đó là lý do tại sao các ký tự không phải ASCII đơn giản bị bỏ qua trong các hoạt động viết hoa / viết hoa / viết hoa. (Tất nhiên cũng đọc kết quả sai, nhưng ít nhất nó cũng dễ kiểm tra.)