You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Codewars Ruby哈希查询函数问题求助:返回结果不符合预期

Codewars Ruby greet函数问题排查

我正在做Codewars的Ruby挑战,要实现一个greet函数:传一个language字符串参数,返回对应语言的问候语;如果语言不在预设的哈希里,或者输入无效,就默认返回英语的问候语。本地测试greet("lithuanian")能得到预期的"Laukiamas",但平台测试却提示“Expected: "Laukiamas", instead got: "Welcome"”,麻烦帮忙排查下问题。

我的代码:

def greet(language)
  greeting = {  'english'=>'Welcome',
    'czech'=>'Vitejte',
    'danish'=>'Velkomst',
    'dutch'=>'Welkom',
    'estonian'=>'Tere tulemast',
    'finnish'=>'Tervetuloa',
    'flemish'=>'Welgekomen',
    'french'=>'Bienvenue',
    'german'=>'Willkommen',
    'irish'=>'Failte',
    'italian'=>'Benvenuto',
    'latvian'=>'Gaidits',
    'lithuanian'=>'Laukiamas',
    'polish'=>'Witamy',
    'spanish'=>'Bienvenido',
    'swedish'=>'Valkommen',
    'welsh'=>'Croeso'
  }

    greeting.key?(language)? greeting.each { |k, v| return v if language == k } : 'IP_ADDRESS_INVALID'
end

问题分析与修复

你的代码有两个关键问题:

  1. 默认返回值完全错误:题目要求语言不存在时返回英语问候语,但你写的是返回'IP_ADDRESS_INVALID',完全不符合需求。
  2. 哈希取值逻辑冗余且有隐患:虽然用each遍历能找到对应值,但哈希本身支持直接通过键取值,而且你用三元表达式加遍历的写法完全没必要——Ruby哈希的fetch方法天生就支持“找到键就返回对应值,找不到就返回默认值”的场景,既简洁又高效。

修改后的代码:

def greet(language)
  greeting = {
    'english' => 'Welcome',
    'czech' => 'Vitejte',
    'danish' => 'Velkomst',
    'dutch' => 'Welkom',
    'estonian' => 'Tere tulemast',
    'finnish' => 'Tervetuloa',
    'flemish' => 'Welgekomen',
    'french' => 'Bienvenue',
    'german' => 'Willkommen',
    'irish' => 'Failte',
    'italian' => 'Benvenuto',
    'latvian' => 'Gaidits',
    'lithuanian' => 'Laukiamas',
    'polish' => 'Witamy',
    'spanish' => 'Bienvenido',
    'swedish' => 'Valkommen',
    'welsh' => 'Croeso'
  }

  greeting.fetch(language, greeting['english'])
end

修复说明:

  • fetch方法一步到位:第一个参数是要查询的语言键,第二个参数是默认返回的英语问候语,完美匹配题目要求的逻辑。
  • 删掉了多余的key?判断和each遍历,代码更简洁,也避免了遍历中提前return可能带来的意外问题(虽然你当前的遍历逻辑能运行,但完全没必要绕这个弯)。
  • 修正了默认返回值,符合题目对无效输入的处理要求。

内容的提问来源于stack exchange,提问作者wanderingnowhere

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.31 18:15:59