首页 > 解决方案 > 为什么 Elixir 的 String.capitalize() 函数将剩余字母小写?

问题描述

Elixir 的String.capitalize/2函数“将给定字符串中的第一个字符转换为大写,其余的转换为小写”。将第一个字符大写而其余字符保持不变不是更直观吗?也许我缺少一些推理?

当前的实现导致the local ATM-> The local Atmforgotten PIN->Forgotten Pin等。

标签: elixir

解决方案


这是需要大写的长生不老药 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实现的唯一原因是因为大多数开发人员都希望它以这种方式工作。

这个答案让我对可能绕过它的推理感到好奇。:)


推荐阅读