0

如果我使用多个 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")
4

1 回答 1

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
于 2013-07-27T01:16:03.840 回答