有人可以向我解释为什么在ruby控制台(版本2.3.4) 试图打印哈希 这些工作:
puts({a: 'a', b: 'b'})
puts(a: 'a', b: 'b')
puts a: 'a', b: 'b'
puts [a: 'a', b: 'b'] <<< array length 1 with value of hash
puts Hash[a: 'a', b: 'b']
但这些都不起作用:
puts {a: 'a', b: 'b'}
puts {:a => 'a', :b => 'b'}
puts{:a => 'a', :b => 'b'}
给出错误:
语法错误,意外&#39;,&#39;,期待&#39;}&#39;
将{a:&#39; a&#39;,b:&#39; b&#39;}
_ _ _ _ _ _ ^
这些:
puts {:a => 'a'}
puts {a: 'a'}
puts{a: 'a'}
也错误:
语法错误,意外=&gt;,期待&#39;}&#39;
put {:a =&gt; &#39;一个&#39;}
_ _ _ _ _ ^
我的理解()围绕功能是完全可选的,取决于开发人员的风格偏好。
哈希周围的{}几乎是可选的,但从不要求不使用。
我能理解解释器是否在1或2个哈希值之间混淆(因为puts需要1个以上的参数),但它只是死了。
更糟糕的是: 这些工作:
puts({a: 'a', b: 'b'}, [:d, :e])
puts ({a: 'a', b: 'b'})
但这些不是:
puts ({a: 'a', b: 'b'}, [:d, :e])
puts (Hash[a: 'a', b: 'b'], [:d, :e])
任何人都可以解释幕后的实际情况吗?
答案 0 :(得分:5)
Ruby有一个小故障,因为它对括号过于宽容。几乎任何东西都可以让他们离开,但是......
puts{}
解析为&#34;使用块puts
调用{}
。&#34;反过来,块必须包含完整的语句,而不是逗号,
分隔列表。所以你得到错误的语法错误。
修复只是puts({})
接下来,puts ()
解析为&#34; puts
后跟一个参数,在括号中。&#34;因此,解析器再次无法处理括号内的逗号,
。修复方法是取出空格:puts()