Clojure演習 ライブラリ書いてみた-2
memoize
前回こんなコードを書いていた。
(defn get-content [c sm] (let [rdr ((memoize get-data) sm)] (assoc {} c (first (:content (first (html/select (html/html-resource rdr) [c]))))) ))
これでキャッシュされると思っていたらしい。アホか。
(def get-data-cache (memoize get-data))
とでもしてからget-data-cacheを呼ぶべきらしい。指摘に感謝。
単純化
前回色々書きすぎていたように思えたので書きなおした。
(ns nicod-clj.core (:gen-class) (:require [pl.danieljanus.tagsoup :as tagsoup]) (:import java.io.ByteArrayInputStream) ) (defn get-thumbinfo-data [sm] (tagsoup/parse (apply str "http://ext.nicovideo.jp/api/getthumbinfo/" sm))) (def get-thumbinfo-data-cache (memoize get-thumbinfo-data)) (defn getthumbinfo [sm] (get-thumbinfo-data-cache sm) )
これだけで良いんじゃないだろうか。
ちゃんと何か書いたって気がしないけれども。