Elixir is a language that runs on the Erlang VM (BEAM) and looks a bit like ruby. It caught my interest, because I wanted to learn something that was different and not very mainstream, a little inspired by the 12 resolutions for programmers post.

Update: check out the suggestions and examples in the reddit thread too

I found myself very confused and googled all kinds of things like

How to access property of elixir object

How to access key of elixir object

How to print property of elixir struct

until I found an example that showed that variable assignment works very much like in Go or the error first callbacks in node.js.

I was trying to print a certain value that belogs to a key on a struct for File.stat like in the following example:

myFile = File.stat("hello.txt") IO.inspect myFile.access // output: ** (UndefinedFunctionError) undefined function :ok.access/1 (module :ok is not available) :ok.access({:ok, %File.Stat{access: :read_write, atime: {{2016, 1, 27}, {13, 7, 22}}, ctime: {{2016, 1, 27}, {13, 7, 22}}, gid: 1000, inode: 11545547, links: 1, major_device: 41, minor_device: 0, mode: 33188, mtime: {{2016, 1, 27}, {13, 7, 22}}, size: 20, type: :regular, uid: 1000}}) (file) (elixir) lib/code.ex:363: Code.require_file/2

The trick is to just use two variables from the very beginning, status of the function first.

{status, myFile} = File.stat("hello.txt") IO.inspect myFile.access //output test1.ex:1: warning: variable status is unused :read_write

Again, this might be a problem NOBODY else has, but I didn’t see a lot of places it was described in the getting started or beginner guides. Only through the File.stat documentation I got the idea to search for structs and look through some examples.

I thought my mistake was that I was trying to access the values of the struct wrongly, but it was actually the variable assignment in elixir that I buggered up. Actually the idea of the error first returns/callbacks is great, because you can test if a previous function has failed before trying to make the rest of your functions cope with some undefined value.

A really neat thing is that the compiler will tell you that you’re not using a defined variable.