【发布时间】:2016-09-28 10:00:05
【问题描述】:
我正在用 erlang 编写一个函数,它应该能够接受不同顺序和不同格式的各种参数集,并且我使用了非常严格的保护措施来确保正确匹配。
这样写长守卫的情况并不少见:
my_fun(List, Number, OptionalList, Record)
when is_list(List) andalso length(List) >= 5,
is_integer(Number) andalso Number >= 10 andalso Number =< 50 orelse Number =:= undefined,
is_list(OptionalList) orelse OptionalList =:= undefined,
is_record(Record, my_record) ->
我在这里使用 orelse 和 andalso 很多,它使代码的可读性大大降低,而且通常更长。
有没有办法使用 , 和 ; 来实现相同的保护逻辑只有?
【问题讨论】:
-
考虑使用宏?以
when ?is_integer_in_range(Number, 10, 50)为例。
标签: erlang