elixir - 为什么某些 Elixir 库函数使用多个参数,而其他函数则使用默认值?

标签 elixir default-arguments arity

例如,Integer.parse/2 函数的基数默认值为 10,而 String.to_integer/1String.to_integer/2 都存在,其中第二个用于需要指定 base 时。

这样实现有什么原因吗? 我什么时候应该使用其中之一来定义函数?

我假设的答案是,不同参数的实现存在一些实际差异,而默认值版本共享相同的实现。但是,我不知道为什么在这种情况下会有不同的实现,特别是。

最佳答案

本质上是相同的事情。当您在 Elixir 中指定默认参数时,会创建两个函数。参数设置为默认值的少一元数之一,以及采用 附加参数。通过内省(introspection) Integer 模块您可以看到,它 导出 parse/1 和 parse/2。

iex(2)> Integer.module_info(:exports)
[__info__: 1, digits: 1, digits: 2, floor_div: 2, "MACRO-is_even": 2,
 "MACRO-is_odd": 2, mod: 2, parse: 1, parse: 2, to_char_list: 1, to_charlist: 1,
 to_charlist: 2, to_string: 1, to_string: 2, undigits: 1, undigits: 2,
 module_info: 0, module_info: 1 ]

对于String.to_integer,作者决定更加明确并反射(reflect)实现此功能的底层 Erlang 函数的包装。

关于elixir - 为什么某些 Elixir 库函数使用多个参数,而其他函数则使用默认值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45177804/

相关文章:

function - 如何在 Elixir 中将 arity 2 的函数作为 Enum.map 的参数传递?

common-lisp - 在 Common Lisp 中查找函数的数量

browser - Elixir & Hound headless (headless)浏览器

elixir - 验证一个日期比另一个日期晚或相同

elixir - 使用 Ecto 同时显示常见的和数据库特定的验证错误

python - 如何输入可变的默认参数

Elixir 将模块的引用作为函数参数传递

python - 当参数在 Python 中指定为 None 时,让函数使用参数的默认值的好方法是什么?

clojure - 使用 dissoc 的一元版本?