由于某种原因,当我尝试从命令行获取参数时,我创建的哈希不会返回值。
这是代码
OSGi
输出结果
DIAL_BOOK = {
"East Bay": 510,
"San Francisco": 415,
"San Jose": 650,
}
city = gets.chomp
if city == "East Bay"
puts "Area Code: #{DIAL_BOOK[city]}
end
我对这里发生的事情感到很困惑。当我硬编码“East Bay”到哈希时它会让我回复510就好了。有人建议发生了什么事吗?
答案 0 :(得分:4)
:city
,而不是实际变量city
。#
而不是$
完成(例如#{DIAL_BOOK[city]}
)。city
包含字符串。更改哈希值以将字符串用作键(DIAL_BOOK = { 'Easy Bay' => 510 }
)或在查找之前将城市转换为符号(#{DIAL_BOOK[city.to_sym]
)。此外,您可能希望简化并删除if
条件,除非您特别只想打印" East Bay"的值。
答案 1 :(得分:1)
变量city
与符号:city
不同。要在ruby中插入字符串,请在双引号内使用
#{expression}
,因为双引号允许转义序列,而单引号则不允许。
city = gets.chomp
puts "Area Code: #{DIAL_BOOK[city]}" if city == "East Bay"
要将字符串作为哈希中的键,请使用rocket =>
而不是:
。否则,您必须使用city.to_sym
代替city
。
DIAL_BOOK = {
"East Bay" => 510,
"San Francisco" => 415,
"San Jose" => 650,
}
火箭操作员可以接收任何不是有效标签的文字。 :
在其左侧假定有效标签。 DIAL_BOOK[:'East Bay'] #=> 510
{ :$set => 11 } # Valid
{ $set: 11 } # Invalid
{ :'where.is.pancakes.house?' => 23 } # Valid
{ 'where.is.pancakes.house?': 23 } # Invalid