哈希不会从gets.chomp返回值

时间:2016-05-23 04:17:05

标签: ruby

由于某种原因,当我尝试从命令行获取参数时,我创建的哈希不会返回值。

这是代码

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就好了。有人建议发生了什么事吗?

2 个答案:

答案 0 :(得分:4)

  1. 您传递了一个符号:city,而不是实际变量city
  2. 字符串插值由#而不是$完成(例如#{DIAL_BOOK[city]})。
  3. 您的哈希键是符号,但city包含字符串。更改哈希值以将字符串用作键(DIAL_BOOK = { 'Easy Bay' => 510 })或在查找之前将城市转换为符号(#{DIAL_BOOK[city.to_sym])。
  4. 此外,您可能希望简化并删除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