netch80: (Default)
netch80 ([personal profile] netch80) wrote2011-08-18 09:05 am

Erlang hint: проверка типа структуры в возврате

Из того, что в принципе в документации есть, но так с ходу не заметишь.


handle_info(foo, State) ->
  NewState = #state{} = do_foo(State),
  {noreply, NewState};


если do_foo() случайно вернуло ерунду, а не нужный record, то без проверки = #state{} оно заметится только на следующем цикле, а это немного не то, что нужно:)

Аналогично можно сделать function clause на входе:


do_foo(#state{} = State) ->


(Альтернатива в виде dialyzer тяжеловата, мягко говоря, и не во всех случаях.)