【问题标题】:how to work with collections implementing IReduceInit如何使用实现 IReduceInit 的集合
【发布时间】:2019-10-08 07:29:35
【问题描述】:

next.jdbcplan 函数返回实现IReduceInit 的集合,这是什么意思?试图绕开它,拥有一个常规集合然后对其应用转换器,而不是拥有一个实现上述接口的 coll 有什么区别。

另外,你如何使用实现上述接口的 coll,在上面找不到任何材料。

在下面的代码中 -

(def results (jdbc/plan @datasource2 ["select * from cabs"]))

(into [] (map :name) results) => ["a", "b"]

(into [] (map identity) results) => gives an error - [..... missing `map` or `reduce` {row}]

为什么第一个传感器工作而第二个失败?

【问题讨论】:

    标签: clojure


    【解决方案1】:

    identity 只是简单地返回它的参数而不接触它,所以(map identity) 不会“接触”这些行并且它们不会被实现。

    jdbc/plan 要求“触摸”每一行以从中选择元素(它没有实现 Clojure 数据结构,它只是从底层ResultSet 的当前行中提取字段),或者强制实现通过各种hash map操作:assoccons(隐式调用seq)、dissociteratorseq

    这不仅仅是关于集合,IReduceInit -- jdbc/plan 添加了一个附加层,它是底层可变 ResultSet 对象的当前行的“惰性”表示。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-06-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-10-14
      • 2014-06-28
      相关资源
      最近更新 更多