3

次の関数を使用する Web フレームワークを作成しました。

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

snake_casedまたはであるディレクトリ名をプロジェクトのクラス名にhyphen-cased変換します。PascalCased

問題は、関数が と のみを削除_-、次の文字を大文字にしないことです。.capitalize、またはを使用して、名前を適切なクラス名.upcaseにする方法はありますか?snake/hyphen_/-casedPascalCased

4

4 に答える 4

5
gsub(/(?:^|[_-])([a-z])?/) { $1.upcase unless $1.nil? }
于 2012-05-20T22:11:04.373 に答える
4

これにより、_ で囲まれた文字列が配列に分割されます。すべてのメンバーを大文字にし、配列を文字列に接着します。

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

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

あなたのコードはいくつかの理由で機能しません:

  • text.capitalize!capitalize メソッドの結果のオブジェクトは破棄されます -またはのようなことをする必要がありますtext = text.capitalize
  • ただし、capitalizeメソッドupcaseは文字列の最初の文字であり、すべての単語の最初の文字ではありません。
于 2012-05-20T22:15:31.647 に答える
2

Rails にはcamelizeと呼ばれる同様のメソッドがあります。基本的に、で構成される文字列のすべての部分を大文字にし、[a-z0-9]それ以外はすべて削除します。

于 2012-05-20T22:05:35.517 に答える
1

あなたはおそらくそれをもっと小さいものにゴルフすることができますが、

txt = 'foo-bar_baz'
txt.gsub(/(?:^|[-_])([a-z])/) { |m| m.upcase }.gsub(/[-_]/, '') # FooBarBaz
于 2012-05-20T22:04:30.967 に答える