This page is not created by, affiliated with, or supported by Slack Technologies, Inc.
2015-06-18
Channels
- # admin-announcements (10)
- # boot (260)
- # cider (44)
- # clojure (226)
- # clojure-berlin (24)
- # clojure-dev (68)
- # clojure-germany (5)
- # clojure-india (14)
- # clojure-italy (3)
- # clojure-japan (21)
- # clojure-poland (34)
- # clojure-russia (20)
- # clojure-spain (2)
- # clojure-uk (8)
- # clojurescript (86)
- # core-async (38)
- # core-typed (70)
- # datomic (41)
- # docs (8)
- # editors (7)
- # euroclojure (6)
- # instaparse (2)
- # jobs (8)
- # ldnclj (47)
- # om (17)
- # other-lisps (1)
- # reactive (1)
- # reading-clojure (8)
- # reagent (13)
- # sneer (1)
- # sneer-br (1)
まあ、:requireと:asをつかえばライブラリ読み込みの場合は問題はなくなるんですが、DSLちっくに使うkormaみたいなのだとnsごとにいちいちexcludeするという感じでいまは対応しています。ns内にupdate関数があったりするとやっかいですね。
;;普通のprintln
d.core=> (println (range 10))
(0 1 2 3 4 5 6 7 8 9)
nil
;;runつかったものprintln
d.core=> (run! println (range 10))
0
1
2
3
4
5
6
7
8
9
nil
;; mapだとこう
d.core=> (map println (range 10))
0
1
2
3
4
5
6
7
8
9
(nil nil nil nil nil nil nil nil nil nil)
updateの件については、こういうときのために名前が衝突した場合に警告が出るようになってるので、lein checkをすれば修正すべき箇所は網羅できますね。修正自体は面倒ですけど。
changesのrun! のとこ "via reduce"ってありますし、定義覗いたら(reduce #(proc %2) nil coll)ってなってるんですけど(dorun(map proc coll))みたいな感じではないんですね。
"via reduce”というところを強調する真意は分かりませんが、reduce経由だとseqableでなくてもIReduceを実装していれば処理できるというのもありますし、reduceはパフォーマンスについてもかなり考慮されてるんでおそらくそのあたりが理由ですかね。