From: s.wanabe@... Date: 2016-09-13T23:49:08+00:00 Subject: [ruby-core:77266] [Ruby trunk Bug#12758] Error when passing Hash construction to function Issue #12758 has been updated by _ wanabe. This is in FAQ. Please see http://ruby-doc.org/docs/ruby-doc-bundle/FAQ/FAQ.html#s6 : "6.7 Why can't I pass a hash literal to a method: p {}?" And you can pass a hash to method without braces when it is last argument. ``` irb(main):001:0> p a: 1 {:a=>1} => {:a=>1} irb(main):002:0> p 1 => 2 {1=>2} => {1=>2} irb(main):003:0> p a: 1, 2 SyntaxError: (irb):3: syntax error, unexpected '\n', expecting => from /usr/local/bin/irb:11:in `
' irb(main):004:0> ``` ---------------------------------------- Bug #12758: Error when passing Hash construction to function https://bugs.ruby-lang.org/issues/12758#change-60497 * Author: Jimi Damon * Status: Open * Priority: Normal * Assignee: * ruby -v: ruby 2.1.3p242 (2014-09-19 revision 47630) [x86_64-linux] * Backport: 2.3: UNKNOWN ---------------------------------------- I apologize if this is a known issue but I couldn't find it in the search. If you have a function that can take a Hash, it behaves correctly if you pass a variable that contains the Hash compared to when you pass in a Hash construction using braces {}. Example def foo(a) puts a.class puts a end > foo [1,2] Array [1, 2] > a = { a:1 } > foo a Hash {:a=>1} # This breaks > foo { a:1 } SyntaxError: (irb):23: syntax error, unexpected ':', expecting '}' foo {a:1} ^ but this works > foo( {a:1} ) Hash {:a=>1} This is more of a bug related to consistent syntax of the language and it is something that is allowed in Groovy and Scala -- https://bugs.ruby-lang.org/ Unsubscribe: