[erlang-questions] why can't _ be passed around?

Matthias Lang <>
Thu Sep 22 14:08:41 CEST 2011


Hi,

Idle curiosity: why can't I pass or send _? 

I can write:

  f() ->
    receive _ -> ok
    after 500 -> exit(timeout) end.

But I can't write

  g(Pattern) ->
    receive Pattern -> ok
    after 500 -> exit(timeout) end.

  f() ->
    g(_).

Nor can I write

  f() ->
    g({my_atom, 3, _}).

Ok, I realise I'm not allowed to because _ isn't bound. But _ can't
ever be bound (right? or is there another way of thinking about _?).

I've written g/1 as a macro. There doesn't seem to be a catch.

Thoughts? Am I asking for patterns to be first class? Whoever wrote
ets:match() must have had a similar train of thought.

Matt



More information about the erlang-questions mailing list