[elixir/ru] Structs and Exceptions

This commit is contained in:
Ev Bogdanov 2017-08-19 20:11:27 +03:00
parent e3f904d911
commit b4d50ee299

View File

@ -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
#=> "какая-то ошибка"
```