你是否过滤了 Elixir 中所有函数的输入?
Do you filter the input to all your functions in Elixir?
在编写我的 Elixir 函数时总是让我感到困惑的一件事是我是否应该过滤或 normalize
我的函数。这背后的原因是因为 Elixir 倾向于将 "input"
和 'input'
区别对待,一个是位串,另一个是字符列表。
是过滤和规范化所有输入更好,还是让它出错,说您发送了一个字符列表而不是预期的位串?
大多数 Elixir 库仅处理位串(双引号),并要求您在使用该库之前手动转换字符列表(单引号)。
但是,这完全取决于您的用例。例如,如果我要编写一个库,将另一个 erlang 库的输出作为输入,如果每次使用该库时都必须转换 charlist,那将很不方便。恕我直言,这只是一个糟糕的 API 设计。尽管如此,我认为只要您不明确需要它们,您就不应该处理字符列表。位串是 Elixir 中处理字符串的标准方式,无需为每个方法添加所有转换混乱。
最后,确实是一个问题,错误信息可能非常隐晦,而且有些句段来自图书馆的深处。这是动态类型语言的普遍缺点。我仍然不会明确处理这个案例,因为它不是 API 的一部分。
在编写我的 Elixir 函数时总是让我感到困惑的一件事是我是否应该过滤或 normalize
我的函数。这背后的原因是因为 Elixir 倾向于将 "input"
和 'input'
区别对待,一个是位串,另一个是字符列表。
是过滤和规范化所有输入更好,还是让它出错,说您发送了一个字符列表而不是预期的位串?
大多数 Elixir 库仅处理位串(双引号),并要求您在使用该库之前手动转换字符列表(单引号)。
但是,这完全取决于您的用例。例如,如果我要编写一个库,将另一个 erlang 库的输出作为输入,如果每次使用该库时都必须转换 charlist,那将很不方便。恕我直言,这只是一个糟糕的 API 设计。尽管如此,我认为只要您不明确需要它们,您就不应该处理字符列表。位串是 Elixir 中处理字符串的标准方式,无需为每个方法添加所有转换混乱。
最后,确实是一个问题,错误信息可能非常隐晦,而且有些句段来自图书馆的深处。这是动态类型语言的普遍缺点。我仍然不会明确处理这个案例,因为它不是 API 的一部分。