Hacker Newsnew | past | comments | ask | show | jobs | submitlogin

To show the struct example:

    def do_thing(%Foo{} = foo), do: foo
Here `foo` has to be type of struct `%Foo{}`.

    def do_thing(%Foo{bar: "baz"} = foo), do: foo
Here `foo` has to be struct `%Foo{}` with field `:bar` with the value of `"baz"`.

Another one I like to point out is how operators aren't rampantly overloaded.

    def add(a, b), do: a + b
This will _only_ work with floats or integers because `+` only works on those types. String concatenation, adding lists, date math, etc have their own operators/functions.

While Elixir does offer mechanisms to overload operators, you have to be very explicit about it. There is no way to globally redefine `+`, for example. It would be on a per-module or even per-function basis (and not something that is done too often, though there are some good uses of it out there).

Dynamic typing in Elixir really isn't that big a hinderance if you stick to its idioms. That said, I'm fairly excited about the prospect of the type system.



Guidelines | FAQ | Lists | API | Security | Legal | Apply to YC | Contact

Search: