2016-07-29 3 views
2

용어 유형과 길이를 모두 확인할 수있는 가드 시퀀스를 넣을 수 있습니까? 나는 처음 통과하는 경비원이 전체 서열을 통과시키는 것을 읽었으므로, 목록이라는 용어를 검사 할 때 나머지 경비원을 확인하지는 않는다고 생각한다. 여기 코드입니다 :용어가 길이 == n의 목록인지 확인하는 얼랑 가드 시퀀스

대신 세미콜론의 쉼표로 분리 할 수 ​​있습니다, and과 가드 표현식을 결합하기 위해
save_key(Key) 
    when 
     is_list(Key); 
     length(Key) == 44 -> 

    ok. 

답변

4

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. 
+0

감사합니다. 꽃 봉오리가 필요합니다. –