首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >一个Erlang保护序列,它检查一个项是否是长度为== n的列表

一个Erlang保护序列,它检查一个项是否是长度为== n的列表
EN

Stack Overflow用户
提问于 2016-07-29 20:26:52
回答 1查看 466关注 0票数 2

有没有可能设置一个保护序列来同时检查术语类型及其长度?我读到第一个传递的守卫使整个序列通过,所以我想当我检查术语是一个列表时,它不会检查其余的守卫。代码如下:

代码语言:javascript
复制
save_key(Key)
    when
      is_list(Key);
      length(Key) == 44 ->

    ok.
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-07-29 20:32:12

为了将保护表达式与and结合使用,您可以使用逗号而不是前面提到的here中的分号来分隔它们

代码语言:javascript
复制
-module(a).
-export([save_key/1]).

save_key(Key)
    when
      is_list(Key),
      length(Key) == 44 ->
    ok;
save_key(_) ->
    ko.
代码语言:javascript
复制
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并获得与非列表相同的行为,因为它将抛出错误,并且不会与该子句匹配:

代码语言:javascript
复制
save_key(Key) when length(Key) == 44 ->
    ok;
save_key(_) ->
    ko.
票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38658835

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档