2

例として、このInteger.parse/2関数には base のデフォルト値 10 がありますがString.to_integer/1String.to_integer/2両方が存在し、base指定する必要がある場合に 2 番目が使用されます。

このように実装された理由はありますか?関数を定義するためにいつどちらを使用する必要がありますか?

私の仮定の答えは、デフォルト値バージョンは同じ実装を共有するのに対し、異なるアリティの実装には実際の違いがあるということです。ただし、具体的には、この場合に別の実装が必要になる理由はわかりません。

4

2 に答える 2

3

それはカバーの下でほとんど同じことです。Elixir でデフォルトの引数を指定すると、2 つの関数が作成されます。引数がデフォルトに設定された 1 つ少ないアリティと、追加の引数を取るものの 1 つ。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より明示的であり、これを実装する基礎となる Erlang 関数のラッピングを反映することにしました。

于 2017-07-18T22:17:48.297 に答える