在Elixir中处理变量arity的最佳实践是什么,而不会造成不必要的复杂性和案例匹配?
Python示例:
def function_with_optional_param(param1, param2, param3=None):
if not param3:
param3 = "Whatever"
return
Run Code Online (Sandbox Code Playgroud)
如何在Elixir中最好地处理param3?
这是Elixir中非常常见的模式.最后一个参数应该是一个列表(特定的关键字列表),默认值为[].在Elixir中,如果最后一个参数是关键字列表,则不需要[]在列表周围添加s.例如:
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
Run Code Online (Sandbox Code Playgroud)
处理变量大小参数的另一个选项是将它们全部作为列表传递.这使得函数arity 1,您可以根据需要处理它们.
最后,您可以将部分或全部args作为地图传递.这样做的好处是允许您在地图上进行模式匹配,并根据地图中传递的键创建多个函数子句.
请注意,您无法在关键字列表上轻松匹配,因为它们与订单相关.
| 归档时间: |
|
| 查看次数: |
532 次 |
| 最近记录: |