Frage

Ich habe ein Webframework erstellt, das die folgende Funktion verwendet:

def to_class(text)
    text.capitalize
    text.gsub(/(_|-)/, '')
end

Um Verzeichnisnamen zu ändern, die sind snake_cased oder hyphen-cased in PascalCased klassennamen für Ihr Projekt.

Problem ist, die Funktion wurde nur entfernt _ und -, und schreibt den nächsten Buchstaben nicht groß.Wobei .capitalize, oder .upcase, gibt es einen Weg zu erreichen, Ihre zu machen snake/hyphen_/-cased namen in die richtige PascalCased klassennamen?

War es hilfreich?

Lösung

Dies teilt die Zeichenfolge _ in ein Array auf;schreibt jedes Mitglied groß und klebt das Array wieder an eine Zeichenfolge:

def to_pascal_case(str)
  str.split(/-|_/).map(&:capitalize).join
end

p to_pascal_case("snake_cased") #=>"SnakeCased"

Ihr Code funktioniert aus mehreren Gründen nicht:

  • Das resultierende Objekt der capitalize-Methode wird verworfen - Sie sollte so etwas tun wie text.capitalize! oder text = text.capitalize.
  • Aber die capitalize methode nur upcases der erste Buchstabe der Zeichenfolge, nicht der erste Buchstabe jedes Wortes.

Andere Tipps

gsub(/(?:^|[_-])([a-z])?/) { $1.upcase unless $1.nil? }

Rails hat eine ähnliche Methode namens camelize.Grundsätzlich wird jeder Teil der Zeichenfolge groß geschrieben, bestehend aus [a-z0-9] und entfernt alles andere.

Sie können es wahrscheinlich auf etwas Kleineres reduzieren, aber:

txt = 'foo-bar_baz'
txt.gsub(/(?:^|[-_])([a-z])/) { |m| m.upcase }.gsub(/[-_]/, '') # FooBarBaz
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top