2017-07-23 2 views
1

Ich versuche, alle String-Eingaben .capitalize, kleine Wörter wie "Of", "The" oder "And" auszuschließen.Manuelles Titize in Ruby 2.3.3

Ich kann nicht herausfinden, warum der Code nicht richtig funktioniert.

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 

Hier ist meine Rspec Ausgabe:

Failures:

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

    expected: "Jaws" 
     got: "jaws" 

    (compared using ==) 

Antwort

1

Sie haben eine string literal in condition Warnung:

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

Sie versuchen i mit of oder the vergleichen oder and, aber nach dem ersten Versuch, Sie einen linken Wert nicht vorbei zu vergleichen, versuchen Sie mit:

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

Mehr idiomatische Rubin wäre include?

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

Auf diese Weise können zumindest verwenden, erhalten Jaws

Der Grund, weil Ihre tatsächliche Methode nicht für die Zeichenfolge war and peace funktioniert, ist, weil, wenn die Länge des Wortes, das übergeben wird, kleiner oder gleich 2 dann wird es next ausführen, so wird es nur kapitalisieren e das Wort peace.

+0

Wie kann ich das erste Element im Array ausschließen? ich [0] .kapitaliere! scheint überschrieben zu werden überall wo ich versuche –

+0

Das erste Element in einer Iteration ?, versuche einen Index zu benutzen, in deinem Fall 'each_with_index', sieh dir das an '[1,2,3] .each_with_index {| e, i | p e wenn nicht i.zero?} ' –