Size: a a a

2018 December 28

DR

Dmitry Russ (Aleksandrov) in pro.elixir
А магически менять AST, когда хочется вне макро - это очень плохо на мой взгляд.
источник

DR

Dmitry Russ (Aleksandrov) in pro.elixir
Но нужны конечно очень серьезные причины, чтобы такой магией заниматься. Из задач, что я знаю - я бы таким занимался бы, только чтобы создать DSL для графики или для ML, который будет активно оптимизироваться и компилироваться в нативные call-ы.
источник

DR

Dmitry Russ (Aleksandrov) in pro.elixir
Vladimir Potapev
Короче задачка вырисовывается очень интересная, ещё интереснее чем та, где надо было определять в компайл-тайме выполняется код или в рантайме. =)
Ну, она в корне не логичная. Макро должен менять только то, что внутри контекста, соответственно если нужно перезаписать defmodule, то нужно делать что-то в таком виде:

import Kernel, except: [defmodule: 2]
import MySuperKernelDefmodule, only: [defmodule: 2]
источник

DR

Dmitry Russ (Aleksandrov) in pro.elixir
Или спрятать это за use, т.е.:

use MySuperKernelDefmodule

defmodule ...
источник

VP

Vladimir Potapev in pro.elixir
Спасибо. Буду думать. Вообще хотелось бы это с минимумом нового или изменённого кода решить :)
источник

DR

Dmitry Russ (Aleksandrov) in pro.elixir
Тогда все explicit.
источник

VP

Vladimir Potapev in pro.elixir
Dmitry Russ (Aleksandrov)
Ну, она в корне не логичная. Макро должен менять только то, что внутри контекста, соответственно если нужно перезаписать defmodule, то нужно делать что-то в таком виде:

import Kernel, except: [defmodule: 2]
import MySuperKernelDefmodule, only: [defmodule: 2]
я потому и заюзал @before_compile, чтобы больше свободы иметь. Ан нет, там тоже есть ограничения.
источник

DR

Dmitry Russ (Aleksandrov) in pro.elixir
Vladimir Potapev
Спасибо. Буду думать. Вообще хотелось бы это с минимумом нового или изменённого кода решить :)
Магия без скоупа - это редкое зло, весь мой опыт говорит об этом, что это станет ужасно не поддерживаемым.
источник

VP

Vladimir Potapev in pro.elixir
Пока на простых макросах решаю. Там получается почти "в лоб" решение, но хоть какая-то автоматизация будет.
источник
2018 December 29

СВ

Саша Воронов in pro.elixir
привет. извиняюсь заранее за тупой вопрос, я эликсир я только начал изучать. оператор = является и оператором сравнения, и оператором присваивания. почему 1 = 2 падает с ошибкой, что 1 не равно двум, а
a = 1
a = 2
— нет, хотя под a лежит единица, а 1 все еще не равно 2
источник

AB

Alexey Bolshakov in pro.elixir
сравнения ==
источник

AP

Andrey Pavlov in pro.elixir
потому что это не оператор присваивания и оператор сравнения, а оператор связывания
источник

AP

Andrey Pavlov in pro.elixir
а в эликсире в отличии от эрланга связывать разрешили много раз
источник

AP

Andrey Pavlov in pro.elixir
но этро всего лишь сахар
источник

AP

Andrey Pavlov in pro.elixir
над
a1 = 1
a2 = 2
источник

AP

Andrey Pavlov in pro.elixir
возможно тебе нужно использовать: ^a = 2
источник

СВ

Саша Воронов in pro.elixir
про пин я читал, меня смущало само поведение. теперь стало понятнее, спасибо
источник

AB

Alexey Bolshakov in pro.elixir
просто а =2 переопределит твою переменную
источник

AB

Alexey Bolshakov in pro.elixir
попробуй то же самое в ерланге
источник

СВ

Саша Воронов in pro.elixir
Eshell V10.2  (abort with ^G)
1> a = 1.
** exception error: no match of right hand side value 1

интересно.
источник