From: rr.rosas@... Date: 2014-08-08T15:08:59+00:00 Subject: [ruby-core:64270] [ruby-trunk - Feature #10118] Double splat for non-symbol keys Issue #10118 has been updated by Rodrigo Rosenfeld Rosas. From my point of view the same issues that come from introducing incompatibility come from keeping this confusing behavior where both strings and symbols can be used as identifiers but one have to understand that they are different and not interchangeable. If you introduce a few incompatibilities (I don't think there are that many that couldn't be easily fixed for good) then you force a few users to update their code to not expect symbols from behaving differently from strings. I'm still to hear a good use case where this wouldn't be feasible/desired. On the other hand, if you don't introduce this small compatibility issue you end up with an increased number of confusion caused by them being different. I counted already a ton of issues in Redmine related to confusions due to symbols and strings not being compatible to each other. There's no free solution that would fix all confusions and avoid introducing any backward incompatibilities. ---------------------------------------- Feature #10118: Double splat for non-symbol keys https://bugs.ruby-lang.org/issues/10118#change-48259 * Author: Tsuyoshi Sawada * Status: Feedback * Priority: Normal * Assignee: * Category: * Target version: ---------------------------------------- The double splat operator ** only seems to work with hashes whose keys are symbols. It will not work when a key is a string, for example. This is true for both ways; for construction: def foo **; end foo(:a => 3) #=> nil foo("a" => 3) #=> ArgumentError: wrong number of arguments (1 for 0) and destruction: def bar *; end bar(**{:a => 3}) #=> nil bar(**{"a" => 3}) #=> TypeError: wrong argument type String (expected Symbol) This is confusing. I propose that the double splat syntax should be extended so that it works even when the keys are not symbols. -- https://bugs.ruby-lang.org/