Size: a a a

Clojure — русскоговорящее сообщество

2020 February 01

IG

Ivan Grishaev in Clojure — русскоговорящее сообщество
вот эта хрень Maybe[Int] разворачивается в вызов метода __getindex__ у метакласса для класа Maybe
источник

IG

Ivan Grishaev in Clojure — русскоговорящее сообщество
там еще та кладезь
источник

AI

Andrey Ivanov in Clojure — русскоговорящее сообщество
я не большой питонист, но когда игрался, навскидку не нашел как оборачивать в краткую запись некоторые синтаксические конструкции, например чтобы в подобных случаях каждый раз лямбду руками не писать https://gist.github.com/Ivana-/d2f2b8cacf72b7d025e4bb52ca586b5a#file-webinar2-py-L46
источник

IG

Ivan Grishaev in Clojure — русскоговорящее сообщество
можно написать свой constantly, который примет результат и вернет функцию произвольного аргумента, которая всегда вернет результат
источник

AI

Andrey Ivanov in Clojure — русскоговорящее сообщество
но этот constantly будет вычислять свой аргумент при его вызове, поэтому мне и нужен макрос
источник

IG

Ivan Grishaev in Clojure — русскоговорящее сообщество
def const (result):
 def inner (*args):
   return result
 return inner
источник

IG

Ivan Grishaev in Clojure — русскоговорящее сообщество
ну да, для заморозки вычисления в питоне ничего нет
источник

AI

Andrey Ivanov in Clojure — русскоговорящее сообщество
а были бы макросы - считай что было бы )
источник

AI

Andrey Ivanov in Clojure — русскоговорящее сообщество
хотя для таких случаев действительно можно свой синтаксис навелосипедить и препроцессор прикрутить
источник

IG

Ivan Grishaev in Clojure — русскоговорящее сообщество
но если что, def в питоне локальный, так что всегда можно объявить нормальную функцию, не лямбду, и вернуть ее
источник

IG

Ivan Grishaev in Clojure — русскоговорящее сообщество
а код можно косвенно заморозить, если представить его как список функций, через который ты потом прогонишь значение
источник

IG

Ivan Grishaev in Clojure — русскоговорящее сообщество
и этот список можно составить в рантайме по условию
источник

ST

Sergey Trofimov in Clojure — русскоговорящее сообщество
вот ещё пример 20-кратного ухудшения производительности (varargs)
https://github.com/serioga/clojure-benhcmarks/blob/e723d295a48e5c24dddf72474048c77d2e6d3bb1/src/clojure_benchmarks/varargs.clj#L56
источник

IG

Ivan Grishaev in Clojure — русскоговорящее сообщество
В Elements of Clojure хорошо про это написано. Разбор в сигнатуре замедляет код, и приходится делать как в корных функциях.
источник

ST

Sergey Trofimov in Clojure — русскоговорящее сообщество
Ivan Grishaev
В Elements of Clojure хорошо про это написано. Разбор в сигнатуре замедляет код, и приходится делать как в корных функциях.
«приходится делать как в корных функциях»
это как приходится делать?
источник

IG

Ivan Grishaev in Clojure — русскоговорящее сообщество
ну, вызывать саму функцию с другими аргументами
источник

ST

Sergey Trofimov in Clojure — русскоговорящее сообщество
в clj-http такой стиль используется 😞
источник

MB

Mikhail Borisov in Clojure — русскоговорящее сообщество
Sergey Trofimov
хотя я и сейчас путаюсь
вот тут формами всё подряд называют https://clojure.org/reference/reader
А что с формами непонятно? Имеются в виду S-expression, т.е. что угодно вида

(f x1 x2 x3)
источник

ST

Sergey Trofimov in Clojure — русскоговорящее сообщество
Mikhail Borisov
А что с формами непонятно? Имеются в виду S-expression, т.е. что угодно вида

(f x1 x2 x3)
нет
x1 это форма
источник

ST

Sergey Trofimov in Clojure — русскоговорящее сообщество
а S-expression это expression
источник