有没有可能设置一个保护序列来同时检查术语类型及其长度?我读到第一个传递的守卫使整个序列通过,所以我想当我检查术语是一个列表时,它不会检查其余的守卫。代码如下:
save_key(Key)
when
is_list(Key);
length(Key) == 44 ->
ok.发布于 2016-07-29 20:32:12
为了将保护表达式与and结合使用,您可以使用逗号而不是前面提到的here中的分号来分隔它们
-module(a).
-export([save_key/1]).
save_key(Key)
when
is_list(Key),
length(Key) == 44 ->
ok;
save_key(_) ->
ko.1> c(a).
{ok,a}
2> a:save_key([]).
ko
3> a:save_key(nil).
ko
4> a:save_key(lists:seq(1, 44)).
ok还要注意,由于在防护中抛出的错误被忽略,您可以只添加length(Key) == 44并获得与非列表相同的行为,因为它将抛出错误,并且不会与该子句匹配:
save_key(Key) when length(Key) == 44 ->
ok;
save_key(_) ->
ko.https://stackoverflow.com/questions/38658835
复制相似问题