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

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

打开目录名称 snake_casedhyphen-cased 进入 PascalCased 项目的类名。

问题是,该功能仅删除 _-, ,并且不大写下一个字母。使用 .capitalize, ,或 .upcase, ,有没有办法实现让你的 snake/hyphen_/-cased 名正言顺 PascalCased 班级名称?

有帮助吗?

解决方案

这会将_-cased字符串拆分为一个数组;将每个成员大写,并将数组粘回字符串:

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

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

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

  • Capitalize方法的结果对象被丢弃-您 应该做类似的事情 text.capitalize!text = text.capitalize.
  • 但是 capitalize 方法只是 upcases字符串的第一个字母, 不是每个单词的第一个字母。

其他提示

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

Rails有一个类似的方法叫做 [医]骆驼.它基本上将字符串的每个部分大写,包括 [a-z0-9] 并删除其他一切。

你也许可以把它打成更小的球,但是:

txt = 'foo-bar_baz'
txt.gsub(/(?:^|[-_])([a-z])/) { |m| m.upcase }.gsub(/[-_]/, '') # FooBarBaz
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top