Question

J'ai créé un framework web qui utilise la fonction suivante:

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

À tour les noms de répertoires, qui sont snake_cased ou hyphen-cased en PascalCased les noms de classe pour votre projet.

Problème, la fonction n'a retiré _ et -, et ne pas capitaliser la lettre suivante.À l'aide de .capitalize, ou .upcase, est-il un moyen de parvenir à faire de votre snake/hyphen_/-cased les noms en bon PascalCased les noms de classe?

Était-ce utile?

La solution

Ceci divise l' _tubés chaîne dans un tableau;capitalise tous les membres et colles le tableau en une chaîne de caractères:

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

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

Votre code ne fonctionne pas pour plusieurs raisons:

  • L'objet résultant de la capitaliser méthode est jeté - vous doit faire quelque chose comme text.capitalize! ou text = text.capitalize.
  • Mais l' capitalize méthode de la juste upcases la première lettre de la chaîne, pas la première lettre de chaque mot.

Autres conseils

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

Rails a une méthode similaire appelé camelize.Essentiellement, il capitalise sur chaque partie de la chaîne constituée de [a-z0-9] et supprime tout le reste.

Vous pouvez probablement de golf vers le bas pour quelque chose de plus petit, mais:

txt = 'foo-bar_baz'
txt.gsub(/(?:^|[-_])([a-z])/) { |m| m.upcase }.gsub(/[-_]/, '') # FooBarBaz
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top