假设我想在 clojure 中打印 hbase 表扫描的输出。
(defmulti scan (fn [table & args] (map class args)))
(defmethod scan [java.lang.String java.lang.String] [table start-key end-key]
(let [scan (Scan. (Bytes/toBytes start-key) (Bytes/toBytes end-key))]
(let [scanner (.getScanner table scan)]
(doseq [result scanner]
(prn
(Bytes/toString (.getRow result))
(get-to-map result))))))
get-to-map 将结果转换为地图。它可以像这样运行:
(hbase.table/scan table "key000001" "key999999")
但是如果我想让用户对扫描结果做些什么呢?我可以允许他们将一个函数作为回调传递给每个结果。但我的问题是:如果我希望用户能够懒惰地迭代每个结果,我应该返回什么
(Bytes/toString (.getRow result))
(get-to-map result)
并且不保留以前的结果,这可能发生在使用惰性序列的简单化实现中。