ruby - 第三个 elsif 语句生成 nil 和不需要的输出

标签 ruby testing

执行 BDD 教程和测试要求将单词开头有两个辅音的单词翻译成 pig latin。这是我遇到麻烦的第二个 elsif 语句。代码如下:

def translate(arg)

    vowel = ["a", "e", "i", "o", "u"]
    vowel_word = "ay"

    consonant = ["z", "b", "t", "g", "h"]
    consonant_word = "ay"

    if vowel.include?(arg[0]) == true
        return arg + vowel_word
    elsif consonant.include?(arg[0]) == true
        foo = arg[1,6]
        return foo + arg[0] + consonant_word
    elsif (consonant.include?(arg[0]) == true) and (consonant.include?(arg[1]) == true)
        foo = arg[2, 5]
        return foo + arg[0] + arg[1] + consonant_word
    end
end

translate("apple")
translate("banana")
translate("cherry")

我的问题是第三个条件。输出为零,而不是我想要的“errychay”。任何帮助将不胜感激。

最佳答案

那是因为你

consonant = ["z", "b", "t", "g", "h"]

不是一个完整的辅音列表,特别是它不包括 "cherry"arg[0],即 "c"。所以 "cherry" 既不满足 vowel.include?(arg[0]) 也不满足 consonant.include?(arg[0]),也不三个 if/elsif 条件中的任何一个,条件 block 返回 nil

关于ruby - 第三个 elsif 语句生成 nil 和不需要的输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35464605/

相关文章:

ruby - attr_accessor 是否需要在 Ruby 中使用符号作为变量?

ruby-on-rails - Rails/Device 注册不正确时不会生成 Flash 消息

ruby - 如何在 ActiveAdmin 的显示 View 中隐藏编辑和删除操作?

java - 使用 spark 服务器进行集成测试

mysql - 在 Ruby on Rails 网站中将值(value)从一个网页转移到另一个网页,无需数据库

ruby-on-rails - 如何在Rails应用程序中汇总不同的货币?

ruby-on-rails - 如果我已经有一个没有任何测试的大型代码库,如何开始编写测试?

javascript - 如何使用浅层( enzyme )模拟从渲染方法调用的方法

java - Twilio 试用帐户会发送实际消息吗?

api - 什么是方法 API 测试?