我目前正在学习 Ruby,在教程中声明哈希的方式是这样的:
states {
"Pennsylvania" => "PA",
"Quebec" => "MTL"
}
puts states["Pennsylvania"]
错误消息告诉我:
[Running] ruby "c:UsersilyesOneDriveBureauConcordia2nd YearFall 2019COMP 348RubyProgramspractice.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,因为原子根本不起作用。
当将Hash
文本作为不使用括号的消息发送的唯一参数传递时,块和Hash
文本之间存在歧义。
即当你写类似的东西时
foo {
# something
}
这可能意味着您正在foo
发送消息并传递块,或者传递Hash
。它将被 Ruby 解释为传递一个块,因此 Ruby 期望# something
是一个表达式或表达式序列。
为了让 Ruby 清楚地知道你的意思是传递一个Hash
,你应该使用括号来明确大括号在参数列表中:
states({
"Pennsylvania" => "PA",
"Quebec" => "MTL"
})
puts states["Pennsylvania"]
# PA
当然,这假设了states
的合适定义,如下所示:
states_cache = {}
define_method(:states) do |states = (states_not_passed = true; nil)|
return states_cache.dup if states_not_passed
states_cache = states_cache.merge(states).freeze
end