Size: a a a

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

2019 December 04

KC

Kirill Chernyshov in Clojure — русскоговорящее сообщество
Достаточно обёртку экспортировать
источник

OS

Olim Saidov in Clojure — русскоговорящее сообщество
Приветствую!

Я написал функцию которая создает atom-like объект значение которого сбрасывается через определенное время после каждого reset!

(defn timed-atom [x timeout-ms]
 (let [state (atom nil)
       reset (fn [newval]
               (some-> state deref :promise (deliver :stop))
               (let [p (-> state (reset! {:value newval :promise (promise)}) :promise)]
                 (future
                   (if (= :timeout (deref p timeout-ms :timeout))
                     (reset! state nil))))
               newval)]
   (if (some? x) (reset x))
   (reify
     IDeref (deref [_] (-> state deref :value))
     IAtom (reset [_ x] (reset x)))))


насколько идеоматичен такой код
источник

AR

Andrew Rudenko in Clojure — русскоговорящее сообщество
Olim Saidov
Приветствую!

Я написал функцию которая создает atom-like объект значение которого сбрасывается через определенное время после каждого reset!

(defn timed-atom [x timeout-ms]
 (let [state (atom nil)
       reset (fn [newval]
               (some-> state deref :promise (deliver :stop))
               (let [p (-> state (reset! {:value newval :promise (promise)}) :promise)]
                 (future
                   (if (= :timeout (deref p timeout-ms :timeout))
                     (reset! state nil))))
               newval)]
   (if (some? x) (reset x))
   (reify
     IDeref (deref [_] (-> state deref :value))
     IAtom (reset [_ x] (reset x)))))


насколько идеоматичен такой код
жа почему бы и нет, но:

1. блокировать целый тред на что бы сбросить где-то значение это как-то слишком. как насчет сбрасывать-on-read?
2. IAtom это не только reset
источник

AR

Andrew Rudenko in Clojure — русскоговорящее сообщество
т.е. тут вопрос перформанса и корректности, а не какой-то странной "идеоматичности"
источник

AR

Andrew Rudenko in Clojure — русскоговорящее сообщество
бтв, возвможно в данном случае вообще лучше стоит обернуть в атом core.cache с ttl?
источник

OS

Olim Saidov in Clojure — русскоговорящее сообщество
Andrew Rudenko
жа почему бы и нет, но:

1. блокировать целый тред на что бы сбросить где-то значение это как-то слишком. как насчет сбрасывать-on-read?
2. IAtom это не только reset
Спасибо за отзыв

1. Сбрасывать при чтении - отличный вариант. Попробую.
2. Это intentional. Swap в моем случае не нужен.
источник

OS

Olim Saidov in Clojure — русскоговорящее сообщество
Andrew Rudenko
бтв, возвможно в данном случае вообще лучше стоит обернуть в атом core.cache с ttl?
Это как?
источник

MK

Mikhail Kuzmin in Clojure — русскоговорящее сообщество
Ivan Grishaev
получить метод через get-method, потом задать новый и вызвать старый внутри?
источник

AR

Andrew Rudenko in Clojure — русскоговорящее сообщество
Olim Saidov
Это как?
источник

AR

Andrew Rudenko in Clojure — русскоговорящее сообщество
Olim Saidov
Спасибо за отзыв

1. Сбрасывать при чтении - отличный вариант. Попробую.
2. Это intentional. Swap в моем случае не нужен.
Если это intentional то не стоит называть это атомом и частично поддерживать интерфейс, никому проще от этого не станет
источник

AR

Andrew Rudenko in Clojure — русскоговорящее сообщество
Создай свой протокол и заимплементь его
источник
2019 December 05

AD

Artur Dumchev in Clojure — русскоговорящее сообщество
а кто-нибудь добивался в идее, чтобы можно было выделить форму сочетанием клавиш?
источник

AD

Artur Dumchev in Clojure — русскоговорящее сообщество
как в виме — vaf
источник

ST

Sergey Trofimov in Clojure — русскоговорящее сообщество
Artur Dumchev
а кто-нибудь добивался в идее, чтобы можно было выделить форму сочетанием клавиш?
Ctrl-W?
источник

AG

Alexey Golda in Clojure — русскоговорящее сообщество
Alt+Up, Alt+Down я пользуюсь expand-selection
источник

AD

Artur Dumchev in Clojure — русскоговорящее сообщество
а можешь сказать, как команда называется? У меня ctrl+w ничего не делает
источник

ST

Sergey Trofimov in Clojure — русскоговорящее сообщество
Artur Dumchev
а можешь сказать, как команда называется? У меня ctrl+w ничего не делает
Наверное expand selection и есть
источник

ST

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

AC

Anton Chikin in Clojure — русскоговорящее сообщество
Artur Dumchev
как в виме — vaf
Можно посмотреть и поискать в хоткеях- там есть поиск
источник

AD

Artur Dumchev in Clojure — русскоговорящее сообщество
expand selection  не то, что надо.
Я просто везде пользуюсь  вимом — и в емаксе, и в идее, и в браузере. Там есть концепция vaw — выделить слово, vi[ — выделить внутри квадратных скобок, dt) удалить до ")".

Для лиспа придумали, что можно "f" использовать, которая означает форму. Я это для вима и емакса настроил, а для идеи никак не могу.
источник