-
Решил начать использовать Record в Erlang, но не совсем врубаюсь в Синтаксис Receive, есть рекорд
-record(communique, {type, belief, sources}).
Как мне в receive…end определить type?
Хотя скорее всего я просто туплю в 4 утра, и забыл, что то.♡ recommended by @O01eg
Replies (12)
-
@maxlapshin, еще тупей вопрос в догонку, а как это работает =)?
в смысле:
act()
recieve
#communique{type = message} = Communique -> accept(Communique), act();
#communique{type = percept} = Communique -> percieve(Communique), act()
end
И PM в данном случае все работает, но я не понимаю – откуда Erlang берет значение Communique? -
@nirthfurzahad, из Mailbox процесса. receive это такое служебное слово после которого идут паттерны для сообщений. Кстати, твой код будет утекать памятью, используй gen_server
-
@O01eg, ты делаешь селективный receive и если прийдет другое сообщение, оно останется в mailbox
-
@maxlapshin, А как gen_server по сравнению с простым процессом дружит с памятью, если у меня будет их 2-3 тысячи?
На самом деле "неожиданныйх" входов в системе не будет, это видео игра, и predictability тут 99.99 процентов. Агент получает только 3 типа сообщений, Perception(от окружающей среды), Message(от другого объекта) и Event(от самого себя, когда Perception или Message были обработаны экспертной системой, и сопоставленны с базой верований. -
@nirthfurzahad, неожиданные входы у тебя будут Это же динамический язык. Используй gen_server, разницы никакой по производительности нет. В erlyvideo есть только одно место, где gen_server мешал