Когда вы говорите #msg{to=void, no=3}
в охране, все поля, которые вы не упомянули, будут установлены в значения по умолчанию (обычно undefined
). Таким образом, ваш охранник не соответствует, потому что некоторые из не перечисленных полей не совпадают.
Я стараюсь всегда использовать шаблон, а не охрану, где это возможно, поэтому я бы написал предложение как:
handle(Msg = #msg{to=void, no=3}, State) ->
...
Для этого шаблона требуется, чтобы сообщение Msg было отправлено в виде сообщения MSG (кортеж размером записи MSG с первым элементом msg
), элемент to
должен быть void
, а элемент no
должен быть равен 3. другие элементы записи msg могут быть чем угодно.