Erlang 避免在“a”中重复代码;接收;当输入更改接收的消息类型时

Erlang 避免在“a”中重复代码;接收;当输入更改接收的消息类型时,erlang,Erlang,我希望能够编写一个函数,当它的输入处于某种无效状态时(比如说它是一个整数,无效的意思是-1),它接收带有任何类型信息的消息,但是当它的输入有效时,它只接收与其输入相同类型的消息。例如,可能的解决方案可能是这样的: f(-1) -> receive ... {a, AnyInput} -> % Do something ... end f(ValidInput) -> receive

我希望能够编写一个函数,当它的输入处于某种无效状态时(比如说它是一个整数,无效的意思是-1),它接收带有任何类型信息的消息,但是当它的输入有效时,它只接收与其输入相同类型的消息。例如,可能的解决方案可能是这样的:

f(-1) ->
    receive
        ...
        {a, AnyInput} ->
            % Do something
        ...
    end

f(ValidInput) ->
    receive
        ...
        {a, ValidInput} ->
            % Do something
        ...
    end
这里主要关注的是重复代码,因为receive包含大量相同的代码(同一receive中还有许多其他消息类型)

有没有什么编码模式可以帮助我

我还可以自由地将无效状态设置为任何值,包括undef,如果这样有帮助的话

f(Input) ->
    receive
        ...
        {a, AnyInput} when Input =:= -1 ->
            % Do something
        ...
        {a, Input} ->
            % Do something
        ...
    end