elixir - 为什么 Elixir 的 String.capitalize() 函数将剩余字母小写?
问题描述
Elixir 的String.capitalize/2
函数“将给定字符串中的第一个字符转换为大写,其余的转换为小写”。将第一个字符大写而其余字符保持不变不是更直观吗?也许我缺少一些推理?
当前的实现导致the local ATM
-> The local Atm
,forgotten PIN
->Forgotten Pin
等。
解决方案
这是需要大写的长生不老药 api。
def capitalize(string, mode) when is_binary(string) do
{char, rest} = String.Casing.titlecase_once(string, mode)
char <> downcase(rest, mode)
end
如果我们想满足您的要求,即仅首字母大写,我们可以执行类似的操作。在这里,我们只删除了额外的下套管调用,因此我们只使这段代码在性能方面更加健壮。
def capitalize_only_first(string, mode) when is_binary(string) do
{char, rest} = String.Casing.titlecase_once(string, mode)
char <> rest
end
从性能的角度来看,第二种实现更好。所以,我相信通过 elixir 保留这个capitalize/2
实现的唯一原因是因为大多数开发人员都希望它以这种方式工作。
这个答案让我对可能绕过它的推理感到好奇。:)
推荐阅读
- java - Spring MVC 将战争部署到 tomcat 8.5
- r - 模拟正态分布比在 R 中使用 rnorm() 或标准正态函数更好的方法?
- sql - 带视图的 Oracle 慢速连接
- rtf - 如何在 RTF 模板 BI 发布者中将货币数字翻译成法语单词?
- r - Kable:如何根据行中其他值的比例对值使用条件格式
- apache-kafka - 使用 kafka 流处理器 api 处理失败的消息
- markdown - 为什么这个markdown文本渲染得这么大?
- build - 我可以使用 cargo install 分发由 build.rs 构建的二进制文件吗?
- python - Beautifulsoup 找不到隐藏元素
- javascript - 自定义 ReactJS 外部包(react-horizontal-timeline)