你是否过滤了 Elixir 中所有函数的输入?

Do you filter the input to all your functions in Elixir?

在编写我的 Elixir 函数时总是让我感到困惑的一件事是我是否应该过滤或 normalize 我的函数。这背后的原因是因为 Elixir 倾向于将 "input"'input' 区别对待,一个是位串,另一个是字符列表。

是过滤和规范化所有输入更好,还是让它出错,说您发送了一个字符列表而不是预期的位串?

大多数 Elixir 库仅处理位串(双引号),并要求您在使用该库之前手动转换字符列表(单引号)。

但是,这完全取决于您的用例。例如,如果我要编写一个库,将另一个 erlang 库的输出作为输入,如果每次使用该库时都必须转换 charlist,那将很不方便。恕我直言,这只是一个糟糕的 API 设计。尽管如此,我认为只要您不明确需要它们,您就不应该处理字符列表。位串是 Elixir 中处理字符串的标准方式,无需为每个方法添加所有转换混乱。

最后,确实是一个问题,错误信息可能非常隐晦,而且有些句段来自图书馆的深处。这是动态类型语言的普遍缺点。我仍然不会明确处理这个案例,因为它不是 API 的一部分。