我目前正在学习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,因为原子根本不起作用。
[传递Hash
文字作为不使用括号发送消息的唯一参数时,在块和Hash
文字之间存在歧义。
即当你写像
foo {
# something
}
这可能意味着您正在发送消息foo
并传递一个块,或者传递Hash
。 Ruby将其解释为传递一个块,因此Ruby希望# something
是expression或表达式序列。
为了让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