Size: a a a

2020 August 05

A

Andrey in ErlangRus
Иванов Иванов
а в чем ошибка? Test выше не задан?
Как раз второй Test скажет unsafe
источник

ИИ

Иванов Иванов... in ErlangRus
Andrey
Как раз второй Test скажет unsafe
не понимаю. а первый не скажет?
источник

EM

Evgeny M. in ErlangRus
первый не скажет, а второй скажет потому что Test определена только в одной ветке первого  case
источник

ИИ

Иванов Иванов... in ErlangRus
Evgeny M.
первый не скажет, а второй скажет потому что Test определена только в одной ветке первого  case
как она может быть определена, если требуется для вызова foo:some
источник

EM

Evgeny M. in ErlangRus
Потому что переменные из case текут наружу.
источник

EM

Evgeny M. in ErlangRus
источник

ИИ

Иванов Иванов... in ErlangRus
Evgeny M.
Потому что переменные из case текут наружу.
еще раз - в первом case Test требуется для вызова foo:some
источник

EM

Evgeny M. in ErlangRus
в первом case Test создается только в одной из веток, вот в чем проблема. После первого case Test может быть определена, а может и не быть
источник

EM

Evgeny M. in ErlangRus
И во втором case где Test тоже есть непонятно что с ним делать
источник

ИИ

Иванов Иванов... in ErlangRus
Evgeny M.
в первом case Test создается только в одной из веток, вот в чем проблема. После первого case Test может быть определена, а может и не быть
еще раз - где она там создается? Она матчится, при этом передается в качестве аргумента в foo:some
источник

EM

Evgeny M. in ErlangRus
а вот когда матчится она течет наружу
источник

EM

Evgeny M. in ErlangRus
Сматчилась и становится доступна снаружи case дальше в функции
источник

ИИ

Иванов Иванов... in ErlangRus
Evgeny M.
а вот когда матчится она течет наружу
не течет - просто область видимости у case такая
источник

EM

Evgeny M. in ErlangRus
ну на мой взгляд это течет, но это уже вопрос терминологии
источник

EM

Evgeny M. in ErlangRus
короче во втором case приходится называть переменную Test2
источник

ИИ

Иванов Иванов... in ErlangRus
да, она становится определенной только в одном из случаев. это я затупил. смотрю и не понимаю кажется что {Test, _} = foo:test(Test)
источник

ИИ

Иванов Иванов... in ErlangRus
Evgeny M.
ну на мой взгляд это течет, но это уже вопрос терминологии
if/case/receive scope тут написано  https://www.erlang.org/course/advanced#scope
источник

EM

Evgeny M. in ErlangRus
не, я в курсе что это by design
источник

EM

Evgeny M. in ErlangRus
но тем не менее
источник

ИИ

Иванов Иванов... in ErlangRus
да, там даже begin end не помогают
источник