我正在努力完成这个Codewars挑战赛,但我不知道哪里出错了。有人能帮我一下吗?
question为Welcome
提供了一个翻译"数据库",说明如下:
- 想一个方法把语言存储为一个数据库(例如一个对象)。下面列出了语言,这样你就可以复制和粘贴了!
- 编写一个"welcome"函数,该函数接受参数"language"(总是一个字符串),并返回一个问候语-如果数据库中有该问候语。如果数据库中没有该语言,或者输入无效,则该函数应默认为英语。
我的尝试:
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
在我看来,当我通过IDE运行代码时,它似乎按照请求工作,但我想我一定是错了。
它在告诉我:
预期:"Laukiamas",而不是得到:"欢迎光临"
但当我输入:
p greet("lithuanian")
我得到Laukiamas
。
2条答案
按热度按时间sh7euo9m1#
您可以为
greeting
散列提供一个默认值。这个增强的散列为你做了所有的工作。当它不在那里时,你会得到“欢迎”。
6za6bjd02#
前言
首先,请不要贴出练习题或家庭作业题的链接。在你原来的问题中引用它们,以避免链接腐烂或给试图帮助你的人带来额外的工作。
了解链接问题定义的故障
第二,你误解了核心问题。基本上,要求是返回给定语言键的哈希值,如果该键存在于哈希中。如果不存在,则返回
'english'
键的值。练习中隐含的是理解各种类型的不正确输入,这些输入将无法找到匹配的键;下面的解决方案解决了大部分问题,即使Ruby启用了冻结字符串,也能正常工作。A工作溶液
有很多方法可以做到这一点,但这里有一个简单的例子,它将处理无效的键,将
nil
作为语言参数,并将大写作为一个潜在的问题进行抽象。这将正确返回:
#=> ["Bienvenido", "Welcome", "Welcome", "Welcome"]
因为只有
Spanish
(小写时)会匹配 * TRANSLATIONS * Hash中当前定义的任何键,其余所有键都将使用为练习定义的默认值。测试结果
由于链接问题中包含一些RSpec测试:
所提供的代码不仅通过了所提供的测试,而且还通过了单元测试中未定义的许多其他边缘情况。当针对定义的测试运行时,上面的代码干净地通过了:
如果这是家庭作业,那么您可能希望创建额外的测试来覆盖所有不同的边缘情况。如果您想要更多的解释变量、更显式的中间转换或更显式的键处理,您也可以选择重构为不那么惯用的代码。好代码的要点是可读性,因此,为了使调试更容易,在代码中尽可能明确,在测试中尽可能彻底。