【问题标题】:Clojure ISeq from Scala classes来自 Scala 类的 Clojure ISeq
【发布时间】:2013-01-22 22:30:56
【问题描述】:

我有一堆我想要的 Scala 类(如 Lift's Box、Scala's Option 等) 在 Clojure 中用作 Clojure ISeq。

我如何告诉 Clojure 如何将这些类变成一个 ISeq,以便所有各种序列 相关功能“正常工作”?

【问题讨论】:

    标签: scala clojure


    【解决方案1】:

    要基于 Arthur 的回答,您可以按照以下思路在 Scala 中提供一个通用包装类:

    class WrapCollection(repr: TraversableOnce[_]) extends clojure.lang.Seqable { ... }
    

    【讨论】:

      【解决方案2】:

      如果类实现了Iterable 接口,那么您只需在它们上调用seq 即可获得序列。序列库中的大多数函数都会为您执行此操作,因此在几乎所有正常情况下,您可以将它们按原样传递给像 firstcount 这样的 seq 函数。

      【讨论】:

      • 本文的第一部分是真实的好建议,但你绝对不能将 Seqable 扩展到已经定​​义的类,因为它是一个接口,而不是一个协议。
      • 不只是java.lang.Iterable的情况吗? Scala 集合(更不用说 OptionBox)不会,而是混合(或隐式转换为)scala.collection.TraversableOncescala.collection.TraversableLike 和/或其子特征。
      • s/java.lang/java.util/ 在我之前的评论中。 ://
      猜你喜欢
      • 1970-01-01
      • 2011-04-03
      • 1970-01-01
      • 1970-01-01
      • 2010-09-27
      • 1970-01-01
      • 2011-05-29
      • 2016-06-05
      • 1970-01-01
      相关资源
      最近更新 更多