首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在循环结束时返回整个散列。

在循环结束时返回整个散列。
EN

Stack Overflow用户
提问于 2016-09-29 15:17:44
回答 2查看 52关注 0票数 0

代码语言:javascript
复制
$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

输出

代码语言:javascript
复制
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

问题

为什么整个哈希会在循环结束时返回?发生什么事了呢?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-09-29 15:24:25

每个方法都返回它被调用的原始可枚举对象,这就是为什么在循环结束后保持整个散列的puts

票数 1
EN

Stack Overflow用户

发布于 2016-09-29 16:15:57

您将在代码中两次调用puts

代码语言:javascript
复制
def format_cities(k)
  puts ...         # <- here
end

def display_cities
  # ...
  puts $dail_bo... # <- and here
end

试着保持你的方法集中和模块化。display_cities显然显示了一些东西,所以这里需要puts。另一方面,format_cities转换一个值。它不应该印任何东西。

此外,它的名称(..._cities,复数)表明它同时格式化多个城市,而一次只格式化一个城市。因此,它应该被称为format_city (单数):

代码语言:javascript
复制
# removes the underscore, capitalizes each word
def format_city(city)
  city.split('_').map(&:capitalize).join(' ')
end

然后,将打印部分移动到所述显示相关方法中。但是,与其打印each的结果(返回集合),不如将puts移动到循环中,以打印每个格式化的城市名称:

代码语言:javascript
复制
def display_cities
  puts "Options: "
  $dail_book.sort.each { |k, v| puts format_city(k) }
end
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39774153

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档