|
ToDo:
|
少しだけ時間が取れ始めたのでお勉強です。Clojureは面白い。
(defproject async "0.1.0-SNAPSHOT"
:description "FIXME: write description"
:url "http://example.com/FIXME"
:main async.core
:aot [async.core]
:license {:name "Eclipse Public License"
:url "http://www.eclipse.org/legal/epl-v10.html"}
:dependencies [[org.clojure/clojure "1.8.0"]
[org.clojure/core.async "0.3.443"]])
でcore.asyncを依存関係に入れちゃいます。
goマクロのbodyのみ>!や<!のシングルビックリマーク!使えるようです。
なのでgoマクロから呼ばれた関数でもNGでした。
ブロックするのでmainはダブル吃驚マーク!!です。
(ns async.core
(:require [clojure.core.async
:as a
:refer [>! <! >!! <!! go chan buffer close! thread
alts! alts!! timeout]])
(:gen-class))
(defn go01[ch]
(go
(println "Start 01")
(loop [i 0]
(Thread/sleep 100)
(println "Going 01!")
(if (< i 10)
(recur (inc i))
(>! ch "01")))))
(defn go02[ch]
(go
(println "Start 02")
(loop [i 0]
(Thread/sleep 50)
(println "Going 02")
(if (< i 10)
(recur (inc i))
(>! ch "02")))))
(defn -main[& args]
(let [ch (chan 2)]
(go01 ch)
(go02 ch)
(println (<!! ch))
(println (<!! ch))))