Ruby 尝试放置文字哈希时出现语法错误
Ruby syntax error when try to puts literal hash
有人可以向我解释为什么在 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']
但是 none 这些工作:
puts {a: 'a', b: 'b'}
puts {:a => 'a', :b => 'b'}
puts{:a => 'a', :b => 'b'}
给出错误:
syntax error, unexpected ',', expecting '}'
puts {a: 'a', b: 'b'}
_ _ _ _ _ _^
还有这些:
puts {:a => 'a'}
puts {a: 'a'}
puts{a: 'a'}
也有错误:
syntax error, unexpected =>, expecting '}'
puts {:a => 'a'}
_ _ _ _ _ ^
据我了解 () 函数完全是可选的,取决于开发人员的风格偏好。
而且散列周围的 {} 大部分是可选的,但从不要求不使用。
如果解释器在 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])
谁能解释一下幕后的实际情况?
Ruby 有一个小故障,因为它对圆括号过于宽容。您几乎可以将它们放在任何地方,但是...
puts{}
解析为 "call puts
with a block {}
." 块,反过来,必须包含完整的语句,而不是逗号 ,
分隔列表。所以你得到了错误的语法错误。
修复只是 puts({})
接下来,puts ()
解析为“puts
后跟一个参数,在括号中。”因此,解析器无法处理括号内的逗号 ,
。修复方法是删除 space:puts()
有人可以向我解释为什么在 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']
但是 none 这些工作:
puts {a: 'a', b: 'b'}
puts {:a => 'a', :b => 'b'}
puts{:a => 'a', :b => 'b'}
给出错误:
syntax error, unexpected ',', expecting '}'
puts {a: 'a', b: 'b'}
_ _ _ _ _ _^
还有这些:
puts {:a => 'a'}
puts {a: 'a'}
puts{a: 'a'}
也有错误:
syntax error, unexpected =>, expecting '}'
puts {:a => 'a'}
_ _ _ _ _ ^
据我了解 () 函数完全是可选的,取决于开发人员的风格偏好。
而且散列周围的 {} 大部分是可选的,但从不要求不使用。
如果解释器在 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])
谁能解释一下幕后的实际情况?
Ruby 有一个小故障,因为它对圆括号过于宽容。您几乎可以将它们放在任何地方,但是...
puts{}
解析为 "call puts
with a block {}
." 块,反过来,必须包含完整的语句,而不是逗号 ,
分隔列表。所以你得到了错误的语法错误。
修复只是 puts({})
接下来,puts ()
解析为“puts
后跟一个参数,在括号中。”因此,解析器无法处理括号内的逗号 ,
。修复方法是删除 space:puts()