码
$dail_book = {
"los_angeles" => 212,
"new_york" => 523,
"portland" => 234,
"seattle" => 502,
"miami" => 910,
"san_francisco" => 345,
"sioux_falls" => 543,
"omaha" => 642,
"minneapolis" => 342,
"san_diego" => 233
}
# Removes the underscore, captalizes each city,
# and prints it back to the user
def format_cities(k)
puts "#{k.split('_').map(&:capitalize).join(' ')}"
end
# Loops through $dail_book
def display_cities
puts "Options: "
puts $dail_book.sort.each {|k,v| format_cities(k)}
end输出
Options:
Los Angeles
Miami
Minneapolis
New York
Omaha
Portland
San Diego
San Francisco
Seattle
Sioux Falls
los_angeles
212
miami
910
minneapolis
342
new_york
523
omaha
642
portland
234
san_diego
233
san_francisco
345
seattle
502
sioux_falls
543问题
为什么整个哈希会在循环结束时返回?发生什么事了呢?
发布于 2016-09-29 15:24:25
每个方法都返回它被调用的原始可枚举对象,这就是为什么在循环结束后保持整个散列的puts。
发布于 2016-09-29 16:15:57
您将在代码中两次调用puts:
def format_cities(k)
puts ... # <- here
end
def display_cities
# ...
puts $dail_bo... # <- and here
end试着保持你的方法集中和模块化。display_cities显然显示了一些东西,所以这里需要puts。另一方面,format_cities转换一个值。它不应该印任何东西。
此外,它的名称(..._cities,复数)表明它同时格式化多个城市,而一次只格式化一个城市。因此,它应该被称为format_city (单数):
# removes the underscore, capitalizes each word
def format_city(city)
city.split('_').map(&:capitalize).join(' ')
end然后,将打印部分移动到所述显示相关方法中。但是,与其打印each的结果(返回集合),不如将puts移动到循环中,以打印每个格式化的城市名称:
def display_cities
puts "Options: "
$dail_book.sort.each { |k, v| puts format_city(k) }
endhttps://stackoverflow.com/questions/39774153
复制相似问题