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: <mailto:ruby-core-request / ruby-lang.org?subject=unsubscribe>
<http://lists.ruby-lang.org/cgi-bin/mailman/options/ruby-core>