2017-07-18 36 views
1

作爲示例,Integer.parse/2函數對於基數具有默認值10,而String.to_integer/1String.to_integer/2都存在,其中第二個用於需要指定base時。爲什麼一些Elixir庫函數使用多個arities,而另一些則使用默認值?

有什麼理由以這種方式實施? 什麼時候應該使用其中一個來定義函數?

我假設的答案是不同的arities在實現上有一些實際的差異,而默認值版本共享相同的實現。但是,我不知道爲什麼在這種情況下會有不同的實現,具體來說。

回答

2

在封面下大多是一樣的東西。在Elixir中指定默認參數時,會發生兩個函數被創建的情況。其中一個原因是arg設置爲默認值,另一個採用 其他arg。正如您通過內省整數模塊所看到的,它會導出parse/1和parse/2。 導出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作者的情況下決定更加露骨和反映實現這一基本功能二郎包裝。

+0

哇。首先,看到默認參數的方面很酷,但其次,更有意義的是,他們會這樣做,以便與Erlang一致。 – Camsbury

相關問題