From: Aleksei Guzev Date: 2001-06-26T12:28:34+09:00 Subject: [ruby-talk:16874] RE: national characters is strings =========================================================== Hi, In message "[ruby-talk:16852] RE:national characters is strings" on 01/06/25, "Aleksei Guzev" writes: |What encoding will have sum of two strings ( via "+" ) ? They should have same encoding (or at least compatible encoding). |Now I use English, Russian, German, Esperanto. Next year I plan to |start studying Japanese ( did I spell it corrrectly? ). How could I |combine Japanese and Russian strings? Suppose I read user input. What |encoding has the input string? | |I'm afraid all those questions ( if unanswered ) would lead to Unicode. |The list of problems is at IBM's site I metioned earlier. Use Unicode for that purpose, if it's workable. I don't deny Unicode. M17N will support Unicode (UTF-8 particularly) too. But Unicode is not an almighty solution. If I choose to use ICU, I have to stick with Unicode (and abandon others). matz. ====================================================================== Yesturday a had a time to think of the problem. I understood Unicode being not a solution. The codings differ in some operations: comparison, printing, iterating symbols and spaces. But while two things have methods of identical names but behave differently, they say those things implementing the same interface. Simply there should be the class String providing general operations ( for compatibility it should behave just as in previous versions of Ruby ). But strings of known condings should be organized in subclasses of String. Please realize that You did right this! But You used an attribute to signal what class the string belongs. I propose to use the existing Ruby's typing mechanism :) Second, I thought of multilingual strings. There should be MLString < String. class MLString < String def intialize @rep = Array.new end def +( str ) res = MLString.new if str.isMultilingual? res.rep = @rep + str.rep else res.rep = @rep + [ str ] end return res end def print @rep.each { |substr| substr.print } end end This is an example. But it seems working. This is the first approach. Aleksei Guzev