Я новичок в Erlang и пытаюсь найти лучший способ получить значения по умолчанию для вызова функции, который требует нескольких переменных и/или также не хочет вводить аргументы в определенном порядке. В настоящее время я использую этот формат, основанный на Clojure. Есть ли лучший способ или метод для достижения этого в Erlang? Я также включил пример Clojure в качестве ссылки:
Эрланг версия:
some_function_with_defaults() ->
some_function_with_defaults(#{}).
some_function_with_defaults(Map) ->
Defaults = #{
arg1 => 0, % arg1 default value
arg2 => 1, % arg2 default value
arg3 => 2 % arg3 default value
},
Arguments = maps:merge(Defaults,Map),
#{arg1 := Arg1} = Arguments,
#{arg2 := Arg2} = Arguments,
#{arg3 := Arg3} = Arguments,
%% Do something with arguments
[Arg1,Arg2,Arg3].
%% Example call using only defaults
%% some_function_with_defaults().
%%
%% [0,1,2]
%% Example call specifying a specific value
%% some_function_with_defaults(#{arg1 => 99}).
%%
%% [99,1,2]
Ссылка на Clojure:
(defn some-function-with-defaults
[
& {:keys
[
arg1
arg2
arg3
]
:or
{
arg1 0 ;; arg1_default_value
arg2 1 ;; arg2_default_value
arg3 2 ;; arg3_default_value
}
}
]
;; Do something with arguments
[arg1,arg2,arg3]
)
;; Example call using only defaults
;; (some-function-with-defaults)
;;
;; [0,1,2]
;; Example call specifying a specific value
;; (some-function-with-defaults :arg1 99)
;;
;; [99,1,2]