mirror of
https://github.com/adambard/learnxinyminutes-docs.git
synced 2024-12-23 09:41:36 +00:00
[elixir/ru] Structs and Exceptions
This commit is contained in:
parent
e3f904d911
commit
b4d50ee299
@ -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
|
||||
#=> "какая-то ошибка"
|
||||
|
||||
```
|
||||
|
Loading…
Reference in New Issue
Block a user