在Ruby上声明哈希时出错

在Ruby上声明哈希时出错,ruby,hash,Ruby,Hash,我目前正在学习Ruby,在本教程中,声明哈希的方法如下: states { "Pennsylvania" => "PA", "Quebec" => "MTL" } puts states["Pennsylvania"] 错误消息告诉我: [Running] ruby "c:\Users\ilyes\OneDrive\Bureau\Concordia\2nd Year\Fall 2019\COMP 348\RubyPrograms\practice.rb" c:/Users

我目前正在学习Ruby,在本教程中,声明哈希的方法如下:

states {
  "Pennsylvania" => "PA",
  "Quebec" => "MTL"
}

puts states["Pennsylvania"]
错误消息告诉我:

[Running] ruby "c:\Users\ilyes\OneDrive\Bureau\Concordia\2nd Year\Fall 2019\COMP 348\RubyPrograms\practice.rb"
c:/Users/ilyes/OneDrive/Bureau/Concordia/2nd Year/Fall 2019/COMP 348/RubyPrograms/practice.rb:2: syntax error, unexpected =>, expecting '}'
  :Pennsylvania => "PA",
                ^~
c:/Users/ilyes/OneDrive/Bureau/Concordia/2nd Year/Fall 2019/COMP 348/RubyPrograms/practice.rb:2: syntax error, unexpected ',', expecting end-of-input
  :Pennsylvania => "PA",
                       ^

[Done] exited with code=1 in 0.171 seconds
我不明白为什么,因为我一直在听他的话
我目前正在使用VSC,因为atom根本不起作用。

当传递
散列
文本作为消息发送的唯一参数而不使用括号时,块和
散列
文本之间存在歧义

也就是说,当你写下

foo{
#某物
}
这可能意味着您正在发送消息
foo
并传递一个块,或者传递一个
散列
。Ruby会将其解释为传递一个块,因此Ruby希望
#something
是一个表达式或一个表达式序列

为了让Ruby清楚地知道您的意思是传递一个
散列
,您应该使用括号来清楚地表明大括号在参数列表中:

状态({
“宾夕法尼亚州”=>“宾夕法尼亚州”,
“魁北克”=>“MTL”
})
美国[“宾夕法尼亚州”]
#爸爸
当然,这假设对
状态有一个合适的定义,如下所示:

states {
  "Pennsylvania" => "PA",
  "Quebec" => "MTL"
}

puts states["Pennsylvania"]
states_cache={}
define_method(:states)do | states=(states_not_passed=true;nil)|
如果未通过状态,则返回状态\u cache.dup
states\u cache=states\u cache.merge(states).freeze
结束

缺少赋值等号(
states={
而不是
states{
)@SimpleLime是的,我现在觉得很傻哈哈谢谢欢迎这么做!请阅读“”和“”包括所有链接页面。其中列出的步骤将大大有助于避免此类错误。有趣的是……ruby中没有可选的偏旁词吗?不,括号在ruby中不是真正可选的。在许多情况下,可以省略它们,ruby仍然会理解,但并不总是这样。