summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorEv Bogdanov <evbogdanov.com@gmail.com>2017-08-19 20:11:27 +0300
committerEv Bogdanov <evbogdanov.com@gmail.com>2017-08-19 20:11:27 +0300
commitb4d50ee299ca4d14238f58225e0ddfdf98876eaa (patch)
tree96ce87b978ff1e32ea71f5a9fe9aa6ab7eca8e94
parente3f904d911e661fc74965be50bbfecd9f0b07d95 (diff)
[elixir/ru] Structs and Exceptions
-rw-r--r--ru-ru/elixir-ru.html.markdown38
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
+#=> "какая-то ошибка"
+
```