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 | |
| parent | e3f904d911e661fc74965be50bbfecd9f0b07d95 (diff) | |
[elixir/ru] Structs and Exceptions
| -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 +#=> "какая-то ошибка" +  ``` | 
