2016-07-29 4 views
2

用語タイプとその長さの両方をチェックするガードシーケンスを置くことは可能ですか?私は最初の通過警備員が全体のシーケンスを通過させることを読んだので、私はその用語がリストであることをチェックすると、残りのガードをチェックしないと思う。ここで コードです:andとガード式を組み合わせるために用語が長さ== nのリストであるかどうかをチェックするErlangガードシーケンス

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

ありがとう、芽、それは私が必要なものです! –

関連する問題