Ruby入门:TryRuby平台All together now示例链式调用改写求助
问题解决:Ruby链式哈希调用修改方案
修改后的正确完整代码
def count_plays(year) get_shakey["William Shakespeare"] .select { |k, v| v["finished"] == year }.each { |key, val| puts val["title"] }.count end # 查看1591年的结果调用如下 puts count_plays(1591)
核心说明
- 链式写法的逻辑:
get_shakey本身会返回存储所有作品数据的哈希对象,Ruby中调用哈希的[]取值方法不需要额外加.,所以直接把原代码里的s = get_shakey和后续的s["William Shakespeare"]合并即可,整个逻辑和原代码完全一致,不会改变功能。 - 修改后无输出的常见原因:
- 未修改调用参数:原示例默认调用的是
count_plays(0),没有任何作品的完成年份是0,自然不会输出标题,只会返回计数0。要获取1591年的结果,需要把调用时传入的参数改为1591。 - 语法书写错误:如果错误多加了
.写成get_shakey.["William Shakespeare"],会触发语法错误,导致代码无法正常运行输出。
- 未修改调用参数:原示例默认调用的是
运行效果
调用puts count_plays(1591)后,会先逐行输出4部1591年完成的作品标题,最后输出计数结果4,和示例要求的结果一致。
内容的提问来源于stack exchange,提问作者Xenogenesis
相关产品推荐
相关产品推荐

