Как извлечь значение, возвращаемое функцией token-generator: (delay (состояние токена-генератора)) - PullRequest
0 голосов
/ 06 мая 2019

Я пытаюсь использовать значение из 'new' в другой функции, но похоже, что приведенный ниже фрагмент кода неисправен.

Я не могу понять, почему.

Я помещаю функцию 'token-generator' в задержку, потому что я хочу, чтобы она запускала функцию 'token-generator' только для получения нового токена, когда истекает текущее старое значение токена.

(def r (let [new (delay (token-generator state))]
  (if (compare-and-set! token old new)
      new
      @token)))

(prn r)  ->  nil
(prn @r) ->  NullPointerException   clojure.core/deref-future (core.clj:2208) 

Пожалуйста, помогите! Спасибо!

Edit1: «токен» - это переменная, содержащая последний полученный токен, «старый» - последний использованный токен. Они могут отличаться в объеме программы.

Edit2: добавлен @token (последняя строка)

1 Ответ

1 голос
/ 06 мая 2019

Было бы полезно, если бы вы дали более подробную информацию в вопросе, например, ожидаемые данные ввода и вывода и отсутствующий код (т.е. что такое token?).


Вы, вероятно, хотели разыграть new вроде:

(if (compare-and-set! token old @new)

См. Шпаргалку Clojure для обзора. Посмотрите определения atom, delay, deliver, deref (он же @).

Вы, вероятно, также хотите @token в последней строке.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...