diff options
author | Ev Bogdanov <evbogdanov.com@gmail.com> | 2017-08-19 20:11:27 +0300 |
---|---|---|
committer | Ev Bogdanov <evbogdanov.com@gmail.com> | 2017-08-19 20:11:27 +0300 |
commit | b4d50ee299ca4d14238f58225e0ddfdf98876eaa (patch) | |
tree | 96ce87b978ff1e32ea71f5a9fe9aa6ab7eca8e94 /ru-ru | |
parent | e3f904d911e661fc74965be50bbfecd9f0b07d95 (diff) |
[elixir/ru] Structs and Exceptions
Diffstat (limited to 'ru-ru')
-rw-r--r-- | ru-ru/elixir-ru.html.markdown | 38 |
1 files changed, 38 insertions, 0 deletions
diff --git a/ru-ru/elixir-ru.html.markdown b/ru-ru/elixir-ru.html.markdown index 8342c1e5..6fb176ab 100644 --- a/ru-ru/elixir-ru.html.markdown +++ b/ru-ru/elixir-ru.html.markdown @@ -345,4 +345,42 @@ Range.new(1,10) |> Enum.filter(fn x -> rem(x, 2) == 0 end) #=> [4, 16, 36, 64, 100] +## --------------------------- +## -- Структуры и исключения +## --------------------------- + +# Структуры — это расширения поверх карт, привносящие в Elixir значения по +# умолчанию, проверки на этапе компиляции и полиморфизм. +defmodule Person do + defstruct name: nil, age: 0, height: 0 +end + +joe_info = %Person{ name: "Joe", age: 30, height: 180 } +#=> %Person{age: 30, height: 180, name: "Joe"} + +# Доступ к полю структуры +joe_info.name #=> "Joe" + +# Обновление поля структуры +older_joe_info = %{ joe_info | age: 31 } +#=> %Person{age: 31, height: 180, name: "Joe"} + +# Блок `try` с ключевым словом `rescue` используется для обработки исключений +try do + raise "какая-то ошибка" +rescue + RuntimeError -> "перехвачена ошибка рантайма" + _error -> "перехват любой другой ошибки" +end +#=> "перехвачена ошибка рантайма" + +# У каждого исключения есть сообщение +try do + raise "какая-то ошибка" +rescue + x in [RuntimeError] -> + x.message +end +#=> "какая-то ошибка" + ``` |