ElixirUse - wendysmoak/wiki GitHub Wiki

= Elixir Use =

I ran across use Module.Name in Other People's Code and was not sure exactly what it meant.

There is nothing in the getting started docs. It seems like it should be on http://elixir-lang.org/getting-started/alias-require-and-import.html as it must be doing something similar.

Resorting to irc, I learn that I am looking in the wrong docs.

3:39 PM <wsmoak> Is 'use' documented anywhere?  It's impossible to search for... I'm guessing it makes all the functions of the `use`d module available without typing the prefix?
3:40 PM <ericmj> wsmoak: first result when searching for 'use' here http://elixir-lang.org/docs/stable/elixir/
3:42 PM <wsmoak> ah, I was on the site in the 'getting-started' pages and not finding it.
3:42 PM <asonge> wsmoak: btw, the only thing "use" does is invoke Module.__using__
3:43 PM <asonge> oh, and requires the module to invoke the macro
3:43 PM <wsmoak> trying to make sure I really understand Other People's Code before I go copying and pasting...
3:45 PM <wsmoak> thank you [again, as always] ericmj and asonge :)
3:45 PM <ericmj> happy to help

So the answer is at http://elixir-lang.org/docs/stable/elixir/Kernel.html#use/2 (remember those anchors don't work in Safari...) and then http://elixir-lang.org/docs/stable/elixir/Bitwise.html#__using__/1

use is a macro, and this

use Whatever, option: value

first expands to

require Whatever
  Whatever.__using__([option: value])

... then using is another macro that expands and you can pass it :only_operators or :skip_operators [not sure about that yet, it seems to pass through things like async: true to the testing library.]

⚠️ **GitHub.com Fallback** ⚠️