在Elixir中處理可變元數據的最佳做法是什麼,而不會導致不必要的複雜性&大小寫匹配?可變靈活性藥劑功能的最佳實踐?
Python的例子:
def function_with_optional_param(param1, param2, param3=None):
if not param3:
param3 = "Whatever"
return
如何參數3最好的藥劑處理的?
在Elixir中處理可變元數據的最佳做法是什麼,而不會導致不必要的複雜性&大小寫匹配?可變靈活性藥劑功能的最佳實踐?
Python的例子:
def function_with_optional_param(param1, param2, param3=None):
if not param3:
param3 = "Whatever"
return
如何參數3最好的藥劑處理的?
這是Elixir中非常常見的模式。最後一個參數應該是一個列表(關鍵字列表具體),默認爲[]
。在Elixir中,如果最後一個參數是關鍵字列表,則不需要在列表中添加[]
。例如:
def do_lots(arg1, arg2, opts \\ []) do
one = opts[:one] || :default
two = opts[:two] # default to nil if it's not passed
# do something with arg1, arg2, one, and two
end
def my_func do
arg1
|> do_lots(2)
|> do_lots(49, one: :question)
|> do_lots(99, two: :agent)
|> do_lots(-1, one: 3, two: 4)
end
處理變量大小參數的其他選項是將它們全部作爲列表傳遞。這使得函數arity 1可以根據需要進行處理。
最後,您可以將某些或全部參數作爲地圖傳遞。這有利於您在地圖上模式匹配,並根據地圖中傳遞的鍵創建多個函數子句。
請記住,您無法輕鬆地在匹配關鍵字列表上進行匹配,因爲它們與訂單相關。
最好的辦法是使用默認參數:
def function_with_optional_param(param1, param2, param3 \\ "Whatever") do
# something
end
但它實際上創建了兩個功能 - 一個有兩個參數,另一個有三個。