Domanda

Ho creato un framework Web che utilizza la seguente funzione:

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

Per attivare i nomi delle directory generatori snake_cased o hyphen-cased in nomi di classe PascalCased per il tuo progetto.

Problema è, la funzione rimossa solo _ e - e non capitalizza la lettera successiva.Usando .capitalize o .upcase, c'è un modo per ottenere i nomi di snake/hyphen_/-cased nei nomi di classe PascalCased adeguati?

È stato utile?

Soluzione

questo divide la stringa _-asiatica in un array;Capitalizza ogni membro e colle ritorna l'array in una stringa:

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

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

Il tuo codice non funziona per diversi motivi:

    .
  • L'oggetto risultante del metodo capitalizza è scartato - tu dovrebbe fare qualcosa come text.capitalize! o text = text.capitalize.
  • Ma il metodo capitalize solo upcases la prima lettera della stringa, non la prima lettera di ogni parola.

Altri suggerimenti

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

Rails ha un metodo simile chiamato camelize .Fondamentalmente capitalizza ogni parte della stringa costituita da [a-z0-9] e rimuove tutto il resto.

Probabilmente puoi giocare a giocare a qualcosa di più piccolo, ma:

txt = 'foo-bar_baz'
txt.gsub(/(?:^|[-_])([a-z])/) { |m| m.upcase }.gsub(/[-_]/, '') # FooBarBaz
.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top