Ruby 2.3.3中的Manual Titleize

时间:2017-07-23 22:25:56

标签: ruby rspec capitalize

我正在尝试。大写所有字符串输入,不包括诸如“Of”,“The”或“And”之类的小字。

我无法弄清楚代码无法正常工作的原因。

def titleize(x)
  capitalized = x.split.each do |i|
    if i.length >= 2
      if i == "of" || "the" || "and"
        next
      else
        i.capitalize!
      end
    else
      next
    end
  end
  capitalized.join(' ')
end

这是我的Rspec输出:

故障:

 1) Simon says titleize capitalizes a word
 Failure/Error: expect(titleize("jaws")).to eq("Jaws")

   expected: "Jaws"
        got: "jaws"

   (compared using ==)

1 个答案:

答案 0 :(得分:1)

您在{

}中收到string literal in condition警告

if i == "of" || "the" || "and"

您尝试将ioftheand进行比较,但在第一次尝试后,您没有传递左值进行比较,试试:

if i == "of" || i == "the" || i == "and"

更惯用的Ruby就是使用include?

if ['of', 'the', 'and'].include?(i)

这样至少可以获得Jaws

原因是因为你的实际方法对字符串war and peace不起作用是因为如果传递的单词的长度小于或等于2,那么它将执行next,因此,它只会将单词peace大写。