Ruby'each'方法似乎无法正常工作

时间:2017-08-17 07:20:38

标签: ruby each

我想返回给定字符串参数中存在的元音量。这是我的代码:

def count_vowels(string)
  new = string.split("")
  number_of_vowels = 0
  new.each do |letters|
    if letters = "a" || letters = "e" || letters = "i" || letters = "o" || letters = "u" ||
      numbers_of_vowels = number_of_vowels + 1
    end
  end
  number_of_vowels
end

对于任何参数,number_of_vowels都会返回0。有什么建议吗?

2 个答案:

答案 0 :(得分:2)

您需要检查与==的平等性。 =只是分配。

在这里 - if letters = "a" ||应为if letters == "a" ||

其余部分相同。

工作代码 -

def count_vowels(string)
  new = string.split("")
  number_of_vowels = 0 
  new.each {|letters| number_of_vowels += 1 if letters == "a" || letters == "e" || letters =="i" || letters == "o" || letters == "u"}
  number_of_vowels
end

演示here

答案 1 :(得分:2)

您的代码中存在三个问题。

首先,循环中的变量number_of_vowels中有一个拼写错误。在那里,您将计数器增加到numbers_of_vowels但从不再使用该变量(带有复数numbers)。相反,您会返回仍为number_of_vowels的{​​{1}}(带有单数number)。

其次,0 =letters = "a"分配给变量"a",它将一直返回 truish 。请使用a来比较两个值是否相等。

第三,在==条件的末尾有一个孤儿||。导致以下行的原因是条件的一部分。因为第一个子句已经返回 truish ,所以从不评估计算。

这是固定版本的样子:

if

此外,您可能希望稍微简化一下代码:

def count_vowels(string)
  new = string.split("")
  number_of_vowels = 0 

  new.each do |letters|
    if letters == "a" || letters == "e" || letters == "i" || letters == "o" || letters == "u" 
      number_of_vowels = number_of_vowels + 1
    end 
  end 

  number_of_vowels
end