mirror of
https://github.com/adambard/learnxinyminutes-docs.git
synced 2024-12-23 17:41:41 +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)
|
|> Enum.filter(fn x -> rem(x, 2) == 0 end)
|
||||||
#=> [4, 16, 36, 64, 100]
|
#=> [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