From: matz@... Date: 2018-01-10T06:58:25+00:00 Subject: [ruby-core:84801] [Ruby trunk Feature#14336] Create new method String#symbol? and deprecate Symbol class Issue #14336 has been updated by matz (Yukihiro Matsumoto). In the early stage of Ruby1.9 development, I tried to unify strings and symbols, first by making Symbol class compatible with String class. But so many existing Ruby programs failed to run. So I gave up. If we would unify strings and symbols again in Ruby3, even more existing Ruby programs would fail, and I'm afraid we would see community division as Python2 and 3 did for a long time. It's like a dark age. From some point of view, separation of Symbols and Strings is not ideal, I admit, but I don't believe it's worth crashing so many software. Even if you believe we won't see such breakage (by the proposal like this one), it's hard for me to believe it from the past experience. I need a proof that the breakage is trivial or the benefit outperforms the disadvantage. Matz. ---------------------------------------- Feature #14336: Create new method String#symbol? and deprecate Symbol class https://bugs.ruby-lang.org/issues/14336#change-69515 * Author: dsferreira (Daniel Ferreira) * Status: Rejected * Priority: Normal * Assignee: * Target version: ---------------------------------------- From the discussions on the three previous issues related to the String vs Symbol subject ([5964](https://bugs.ruby-lang.org/issues/5964), [7792](https://bugs.ruby-lang.org/issues/7792), [14277](https://bugs.ruby-lang.org/issues/14277)) there are some conclusions we can assume: * Current String vs Symbol is not the ideal scenario. See: Matz and Koichi comments. * Current philosophy is to use Symbols as identifiers and Strings when strings are needed. * Current situation is that Symbols are being used in many code bases as strings except for strings that really need the String methods. * Current situation is that we are designing APIs to handle both String and Symbol inputs forcing an overhead of API development. I propose the deprecation of `Symbol` class and the introduction of `String#symbol?`. ```ruby foo = :foo foo.class # => String foo.symbol? # => true bar = "bar" bar.class # => String bar.symbol? # => false ``` For backwards compatibility transition path I propose: ```ruby class Symbol def self.===(var) warn ("Warning message regarding deprecated class") if var.class == Symbol true elsif var.class == String && var.symbol? true else false end end end class String def is_a?(klass) case klass when String true when Symbol self.symbol? else false end end end ``` -- https://bugs.ruby-lang.org/ Unsubscribe: