3

我创建了一个使用以下功能的 Web 框架:

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

将目录名称转换为项目的snake_cased类名称。hyphen-casedPascalCased

问题是,该函数只删除了_and -,并且没有大写下一个字母。使用.capitalize, 或.upcase有没有办法让你的snake/hyphen_/-cased名字变成正确的PascalCased类名?

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"

您的代码不起作用有几个原因:

  • capitalize 方法的结果对象被丢弃 - 你应该做类似的事情text.capitalize!or 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 回答