2011-08-03 20 views
5

Nöbetçinin bir bölümünün member(E, L) olduğu, yani E listesinin L listesinin üyesi olup olmadığını test eden, Erlang'da bir if deyimi yazmanın en kolay yolu nedir? naif bir yaklaşımdır:Bir Erlang korumasında üyeliğin kontrol edilmesi

if 
    ... andalso member(E,L) -> ... 
end 

Ama eğer doğru anlamak, çünkü çalışmaz ise, member bir bekçi ifadesi değildir. Hangi yoldan çalışır?

cevap

12

Üye işlevi, geçerli bir güvenlik görevlisi değil. Bunun yerine bir vaka deseni kullanmayı düşünebilirsiniz? Muhtemelen diğer ifadelerinizi vaka ifadesine dahil etmek olasıdır.

case {member(E,L),Expr} of 
    {true,true} -> do(), is_member; 
    {true,false} -> is_member; 
    {false,_} -> no_member 
end 
+0

Güzel. Booleanları durum cümleleri olarak kullanmaktan kaçınmayı umdum, ama en azından bir if ifadesinin içine bir vaka bildirimi yerleştirme ihtiyacını ayırıyor. –

+1

Durum bildirimlerinde boole kullanımı oldukça yaygındır, muhtemelen "if" kullanımından daha yaygındır. –

6

Liste üyeliğini Erlang'daki bir bekçiye test etmek mümkün değildir. Bunu yapmak zorundasınız:

f(E, L) -> 
    case lists:member(E, L) of 
     true -> ...; 
     false -> ... 
    end. 
2

kolay şey, desen eşleştirme bir parçası olarak korumaları dikkate almak, desen kendisinde ifade etmek olamaz veya zor kısmıdır. Bu nedenle, bir görevlisi, koruma testleri dizisidir ve boole ifadeleri değildir. Orijinal bekçi sözdizimi, farkı görmeyi kolaylaştırdı, ancak şimdi değil, boole ifadelerine benziyorlar.

İlgili konular