mhi*_*ely 3 ruby syntax-error literals puts ruby-2.3
有人可以向我解释为什么在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']
Run Code Online (Sandbox Code Playgroud)
但这些都不起作用:
puts {a: 'a', b: 'b'}
puts {:a => 'a', :b => 'b'}
puts{:a => 'a', :b => 'b'}
Run Code Online (Sandbox Code Playgroud)
给出错误:
语法错误,意外',',期待'}'
放{a:'a',b:'b'}
_ _ _ _ _ _ ^
还有这些:
puts {:a => 'a'}
puts {a: 'a'}
puts{a: 'a'}
Run Code Online (Sandbox Code Playgroud)
也错误:
语法错误,意外=>,期待'}'
put {:a =>'a'}
_ _ _ _ _ ^
我的理解()围绕函数完全是可选的,并且取决于开发人员的样式首选项.
哈希周围的{}几乎是可选的,但绝不需要使用.
我能理解解释器是否在1或2个哈希值之间混淆(因为puts需要1个以上的参数),但它只是死了.
更糟糕的是:这些工作:
puts({a: 'a', b: 'b'}, [:d, :e])
puts ({a: 'a', b: 'b'})
Run Code Online (Sandbox Code Playgroud)
但这些不是:
puts ({a: 'a', b: 'b'}, [:d, :e])
puts (Hash[a: 'a', b: 'b'], [:d, :e])
Run Code Online (Sandbox Code Playgroud)
任何人都可以解释幕后的实际情况吗?
Ruby有一个小故障,因为括号太过宽松.几乎任何东西都可以让他们离开,但......
puts{}解析为" puts用块调用{}".反过来,块必须包含完整的语句,而不是逗号,分隔的列表.所以你得到错误的语法错误.
修复只是 puts({})
接下来,puts ()解析为" puts后跟一个参数,在括号中".因此,解析器再次无法处理,括号内的逗号.修复是取出空间:puts()
| 归档时间: |
|
| 查看次数: |
271 次 |
| 最近记录: |