我想向Clojure传递Java函数的映射。这些函数使用实现IFn接口的Java匿名类。我还需要实现ISeq接口以传递列表。 ISeq接口很简单,但具有no documentation。我需要知道ISeq中的每个方法做什么,和/或找到实现所有ISeq方法的类的Java代码(我不想copy my lists转换为Clojure结构)。

最佳答案

我需要知道ISeq中每个方法的作用


您还应该了解它扩展的接口:

public interface Seqable {
    ISeq seq(); // returns an ISeq instance
}

public interface IPersistentCollection extends Seqable {
    // returns the count of this coll
    int count();
    // returns a new coll with o cons'd onto it
    IPersistentCollection cons(Object o);
    // returns a new empty coll (of same type?)
    IPersistentCollection empty();
    // compares this coll against o for equality
    boolean equiv(Object o);
}

public interface ISeq extends IPersistentCollection {
    // returns the first item in this seq
    Object first();
    // returns a new seq of every item in this except the first
    ISeq next();
    // returns a new seq of every item in this except the first
    // ASeq returns empty for empty
    ISeq more();
    // returns a new seq with o cons'd onto this seq
    ISeq cons(Object o);
}



  ...或找到实现所有ISeq方法的类的Java代码


ASeq abstract class implements (most of) ISeq。扩展ASeq implement ISeq.next()的类。

除了重新实现ISeq之外,肯定还有一种更容易实现目标的方法。也许看看Clojure的Java实现会给您一些想法。

08-04 07:04