From: hanmac@... Date: 2018-01-23T14:20:05+00:00 Subject: [ruby-core:84997] [Ruby trunk Feature#14336] Create new method String#symbol? and deprecate Symbol class Issue #14336 has been updated by Hanmac (Hans Mackowiak). dsferreira (Daniel Ferreira) wrote: > Hans, now I completely missed your point. > > What does this prove? > > ```ruby > @height = (node[:height] || node["height"]).to_i > @width = (node[:width] || node["width"]).to_i > @tileheight = (node[:tileheight] || node["tileheight"]).to_i > @tilewidth = (node[:tilewidth] || node["tilewidth"]).to_i > > @orientation = (node[:orientation] || node["orientation"] || :orthogonal).to_sym > > ``` and old (pre keyword) example how to make it work for all three user input (keys or strings), hash data from json or nodes from xml i did some other example that might be interesting how ruby does key and non key arguments, and how to combine them that both input from string or symbols work ~~~ ruby def meth(opts={}, key: opts['key'], **other) p key,opts,other end meth("key"=>"abc", :o => "val") #"abc" #{"key"=>"abc"} #{:o=>"val"} ~~~ ---------------------------------------- Feature #14336: Create new method String#symbol? and deprecate Symbol class https://bugs.ruby-lang.org/issues/14336#change-69704 * 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: