在 Ruby 上声明哈希时出错



我目前正在学习 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

最新更新