例如,Integer.parse/2
函数的基数默认值为 10,而 String.to_integer/1
和 String.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/