2009-10-08 18 views
5

Bir kayıt özelliğinin eşleştirilmesi gereken seçici bir seçim yapmak istiyorum, ancak denediğim herhangi bir sözdizimi varsa, bir "yasadışı desen" iletisi alıyorum.Erlang: Bir alma cümlesindeki bir kayıtla eşleşmenin bir yolu var mı?

Bu mümkün mü? alma tarafından alınan değere kaydın bu eleman bağlamak: desen eşleştirme kullanan

+2

Bu yasadışı bir kalıptır. Kayıt elemanı erişiminin temelde bir bağlayıcının sol tarafında görünmeyen bir işlev çağrısı olduğunu belirtmemek. – Zed

cevap

8
loop(State) -> 
    receive 
     {response, R} when R =:= State#s.reference -> 
      do_something() 
    end. 
20

sadece alternatif: bu anlamına gelmektedir, çünkü

loop(#s{reference = Reference} = State) -> 
    receive 
    {response, Reference} -> 
     do_something() 
    end. 
+1

Gerçekten aradığım şey buydu. –

+0

Yine de biraz şaşırtıcı. Döngü satırındaki referans, State # s.reference öğesine bağlı gibi görünüyor, ancak rhs'de. –

+1

Çünkü bu farklı bir eşittir işarettir :) Bu kayıtlar için "sözdizimsel şeker" dir, ancak eşitliğiniz Erlang'ın bağlayıcı operatörüdür. – Zed

İlgili konular