#うわ、最後の書き込みが2014年かあ。久々に書き込んでみよ。
#clojure.testのisのデフォルトのレポート形式って、failしたテストのソース位置、テストした式、実際の値、なんだけど、これってテストをパラメタライズする(isを含むテストを関数に括り出していろんなパラメータを与える)と情報がほぼゼロになっちゃうんだけど、普通どうやってるんだろう。
#isに与えるdocumentation stringに情報持たせるのかな。
#user=> (contains? () "A")
IllegalArgumentException contains? not supported on type: clojure.lang.PersistentList$EmptyList clojure.lang.RT.contains (RT.java:724)
#これは従来のLispの感覚だとはまるなあ。
#つまりリストはコレクションじゃないってことか。
#user=> (contains? nil "A")
false
#この不条理感
##リストから探すのは線形探索になるからsetを使えってことらしい
#しかし「要素数個なら新たにセットをアロケートするより線形探索の方が速い」という思考に犯されてるからついついいちいちset作るの躊躇しちゃうな
#まぁ、確かにClojure書く時、あんまりリストって使わない気がする。
#user=> (contains? (map s/upper-case ["hoge" "moke" "fuga"]) "MOKE")
IllegalArgumentException contains? not supported on type: clojure.lang.LazySeq clojure.lang.RT.contains (RT.java:829)
#これちょっと嫌だな。
#要素数が既知だとベクタ作りやすいからそっちを多用するね。
#シーケンスに対しては(some #(= elt %) seq) がイディオムなんだな。
#(some #(= "MOKE" %) ["HOGE" "MOKE" "FUGA"])
#こう書け、と。
#んー
#Clojureにはif-let,when-letがあるけど条件が複数ある時(Schemeのand-let*みたいにしたい時)ってどうしてる? こんなの書いちゃったけど既にあるんじゃないかって気が https://gist.github.com/shirok/7d48364cb13262045c3d00ac8db72f67 #わりと要望としては今までも何回か挙がってますけど、未だに標準には組み込まれてはないですね。部分的にはsome->やcond->で解決するものもありそうですけど、もっと複雑なものになると今のところ愚直に書くしかない気がします。
#when-let*はMaybeモナドの代用品でしかないから、やるならもっとちゃんとした形で、とかそういう意図だろうか
#Clojureで内部関数を使いまくる→.classファイルがぼこぼこできる→AppEngineの1ディレクトリ内ファイル数制限にひっかかる、という罠があるのか…
#cool
#(and A B)と(when A B)が違うことにはまるなど
#keepの述語に使った場合に、Aの値がfalseの時に差が出る
#2018年以来3年半ぶりに書き込むぜ
#duct-framework使ってる人いますかね? テストの作法について知りたい。
#test
#Test
#test