我的条件陈述有什么问题?我想把元音拉出来

时间:2013-07-27 01:05:14

标签: refactoring

如果我使用多个if / elsif语句但是希望保持代码整洁,我能够使这段代码工作。请告诉我这段代码有什么问题。我期待看到一个带有[“e”]的数组,但返回[]

def pull_vowels(str)

letters=str.split(//)
vowels=[]

0.upto(letters.count-1) {|idx|
  vowels<<letters[idx]  if letters[idx]==("a"||"e"||"i"||"o"||"u")
}

vowels
end

pull_vowels("test")

1 个答案:

答案 0 :(得分:0)

我猜这是红宝石。

口译员不够聪明,不能在if letters[idx]==("a"||"e"||"i"||"o"||"u")中理解你的意图。

它实际上首先将("a"||"e"||"i"||"o"||"u")逐出"a",然后仅保留"a"

您必须指定每个案例,例如if letters[idx]=="a" or letters[idx]=="e" or ...

另一种解决方案是使用正则表达式,如if letters[idx] =~ /[aeiou]/

在ruby中,你可以更加明确地实现所有这些,比如说

def pull_vowels(str)
    str.scan /[aeiou]/
end