From: ruby-core@... Date: 2018-09-05T15:38:20+00:00 Subject: [ruby-core:88864] [Ruby trunk Bug#13647][Open] Some weird behaviour with keyword arguments Issue #13647 has been updated by marcandre (Marc-Andre Lafortune). Status changed from Feedback to Open Assignee set to matz (Yukihiro Matsumoto) nobu (Nobuyoshi Nakada) wrote: > Just an idea to keep the original argument, if something left. > > https://github.com/nobu/ruby/tree/bug/13647-non-hash-rest I agree that if the conversion of a hash-like argument to keyword parameter fails because the keys aren't all symbols, the original object should be passed. I would do this without waiting for final decision on if `to_hash` is acceptable for keyword arguments or not, since even if it is decided to change so that `to_hash` isn't sufficient, the new behavior will be to receive the original object. ---------------------------------------- Bug #13647: Some weird behaviour with keyword arguments https://bugs.ruby-lang.org/issues/13647#change-73906 * Author: Arepo (Sasha Cooper) * Status: Open * Priority: Normal * Assignee: matz (Yukihiro Matsumoto) * Target version: * ruby -v: 2.3.0, 2.4.0 * Backport: 2.2: UNKNOWN, 2.3: UNKNOWN, 2.4: UNKNOWN ---------------------------------------- I was just playing around and found this weird behaviour, which seems to be in at least Ruby 2.3.0 and Ruby 2.4.0: ~~~ ruby hashie = Hashie::Mash.new(a: :b) def foo(hashie) hashie.inspect end def woo(hashie, bashie: nil) hashie.inspect end def zoo(hashie = nil, cashie: nil) hashie.inspect end foo(hashie) # => "#" woo(hashie) # => "#" ~~~ So far so good, but when we call the third method, we get this: ~~~ ruby zoo(hashie) # => "{\"a\"=>:b}" ~~~ Similarly, ~~~ ruby zoo(:symbol) # => ":symbol" ~~~ Is this intentional behaviour? If so, what's the rationale? If not, is it a known issue? -- https://bugs.ruby-lang.org/ Unsubscribe: