4 votes

Clojure.core.async - en utilisant >! et <! à l'intérieur d'un appel de fonction

Je voudrais pouvoir me garer en appelant une fonction à partir d'un bloc go. L'utilisation de >! et ne fonctionne pas comme prévu.


Cela se garerait correctement.

    (go (

Cependant, si nous avons un appel de fonction,

(defn f [c] (


Le ```n'est pas résolu par le bloc go, car il est dans une fonction. Y a-t-il des alternatives à cela? La plus proche à laquelle je peux penser est d'écrire un macro pour `f` plutôt qu'une fonction - existe-t-il une fonction alternative, au lieu de ``et `>!` que je peux utiliser à cette fin?`` ```

```` ````` ``````

6voto

OlegTheCat Points 3177

C'est une limite connue de core.async. Le macro go ne réécrit que l'expression s passée, il ne peut pas vraiment "voir" à l'intérieur des corps des fonctions.

Je vous suggère de réécrire votre exemple comme suit (dans le cas où vous voulez utiliser des mises en attente et des récupérations de valeurs) :

(defn f [c] (go (

Il y a aussi toujours la possibilité d'utiliser des mises en attente et des récupérations bloquantes (``, `>!!`).``
> (time (dotimes [n 100000] ( (time (dotimes [n 100000] (

``

Selon les tests de performances, la méthode initiale (si elle avait été prise en charge par core.async) devrait être environ 30% plus rapide que la solution de contournement suggérée.

`` ``` ````

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X