From: nobu@... Date: 2016-03-15T03:16:31+00:00 Subject: [ruby-core:74322] [Ruby trunk Bug#12073][Closed] local variable interferes with keyword arguments Issue #12073 has been updated by Nobuyoshi Nakada. Description updated Status changed from Open to Closed Backport changed from 2.0.0: UNKNOWN, 2.1: UNKNOWN, 2.2: UNKNOWN, 2.3: UNKNOWN to 2.1: REQUIRED, 2.2: REQUIRED, 2.3: REQUIRED Sean Linsley wrote: > This is also an issue with array destructuring: You are warned. ``` $ ruby -w -e 'def a(*b); b; end' -e 'a=[1,2,3]' -e 'a *a' -e:3: warning: `*' after local variable or literal is interpreted as binary operator -e:3: warning: even though it seems like argument prefix -e:3: warning: possibly useless use of * in void context -e:3:in `*': no implicit conversion of Array into Integer (TypeError) from -e:3:in `
' ``` ---------------------------------------- Bug #12073: local variable interferes with keyword arguments https://bugs.ruby-lang.org/issues/12073#change-57442 * Author: Josh Cheek * Status: Closed * Priority: Normal * Assignee: * ruby -v: ruby 2.3.0p0 (2015-12-25 revision 53290) [x86_64-darwin13] * Backport: 2.1: REQUIRED, 2.2: REQUIRED, 2.3: REQUIRED ---------------------------------------- This code causes a syntax error: ~~~ruby def a(b:) b end a = 1 a b: 9 # !> program.rb:5: syntax error, unexpected ':', expecting end-of-input # !> a b: (9) # !> ^ ~~~ However, if we remove the local assignment it works ~~~ruby def a(b:) b end a b: 9 # => 9 ~~~ Or if we use parentheses it works ~~~ruby def a(b:) b end a = 1 a(b: 9) # => 9 ~~~ Or if we use non-keyword arguments it works ~~~ruby def a(b) b end a = 1 a 9 # => 9 ~~~ -- https://bugs.ruby-lang.org/ Unsubscribe: